对于sql-server–使用存储过程将一些数据插入表中感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sqlserver把存储过程的结果当一个表,并且为您提供关于hibernate调用存储
对于sql-server – 使用存储过程将一些数据插入表中感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sqlserver 把存储过程的结果当一个表,并且为您提供关于hibernate 调用存储过程 报错 数据库是sqlserver、SQL SERVER 存储过程将 SELECT 数据集赋值给新表某个字段、Sql Server 存储过程调用存储过程接收输出参数返回值、SQL Server 常用存储过程集锦的宝贵知识。
本文目录一览:- sql-server – 使用存储过程将一些数据插入表中(sqlserver 把存储过程的结果当一个表)
- hibernate 调用存储过程 报错 数据库是sqlserver
- SQL SERVER 存储过程将 SELECT 数据集赋值给新表某个字段
- Sql Server 存储过程调用存储过程接收输出参数返回值
- SQL Server 常用存储过程集锦
sql-server – 使用存储过程将一些数据插入表中(sqlserver 把存储过程的结果当一个表)
Invalid Column name
对于我在存储过程中指定的所有列.我有一个名为ID的IDENTITY COLUMN,每次插入记录时都会增加1.我在表中还有一些其他列,但它们可以为null.这是我的存储过程,无法弄清楚我在这里做错了什么.
USE MYDB GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[sp_Test] @myID bigInt,@myFirstName nvarchar(50),@myLastName nvarchar(50),@myAddress nvarchar(MAX),@myPort int AS BEGIN SET NOCOUNT ON; BEGIN insert into MYDB.dbo.MainTable (MyID,MyFirstName,MyLastName,MyAddress,MyPort) values(@myID,@myFirstName,@myLastName,@myAddress,@myPort) END END GO
这是表定义:
USE [MYDB] GO /****** Object: Table [dbo].[MainTable] Script Date: 01/03/2013 11:17:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[MainTable]( [ID] [bigint] IDENTITY(1,1) NOT NULL,[MyID] [bigint] NULL,[MyFirstName] [nvarchar](50) NULL,[MyLastName] [nvarchar](50) NULL,[MyAddress] [nvarchar](max) NULL,[MyPort] [int] NULL,[MyZipCode] [nchar](10) NULL,[CompName] [nvarchar](50) NULL ) ON [PRIMARY] GO
解决方法
insert into MYDB.dbo.MainTable (MyFirstName,MyPort) values(@myFirstName,@myPort)
然后,无需将@MyId参数传递到存储过程中.所以改成它:
CREATE PROCEDURE [dbo].[sp_Test] @myFirstName nvarchar(50),@myPort int AS
如果您想知道添加新插入记录的ID
SELECT @@ IDENTITY
到你的程序结束.例如http://msdn.microsoft.com/en-us/library/ms187342.aspx
然后,您将能够选择这种方式,无论您使用sql还是.NET.
附:一个更好的方法来显示表格定义,就是编写表格并将文本粘贴到stackoverflow浏览器窗口,因为屏幕截图缺少通过GUI设置IDENTITY的列属性部分.要做到这一点,请右键单击表’Script Table as’ – > ‘创建’ – >剪贴板.您还可以进行文件或新查询编辑器窗口(所有自我解释)的实验,看看你得到了什么.
hibernate 调用存储过程 报错 数据库是sqlserver
public List fy() { List result = (List) this.getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { String sql="{Call proc_pages(?,?,?,?,?,?,?,?)}"; Query query = session.createSQLQuery(sql); System.out.println(sql); query.setString(0, "tBuilding"); query.setString(1, "id"); query.setInteger(2, 0); query.setInteger(3, 0); query.setString(4, "*"); query.setInteger(5, 10); query.setInteger(6, 1); query.setString(7, ""); query.executeUpdate(); List list = query.list(); System.out.println("lsitlist" + list.size()); return list; } }); // for (Object tb1 : list) { // Tbuilding tb = (Tbuilding) tb1; // System.out.println("测试数据---------" + tb.getBuildingName()); // System.out.println("测试数据---------" + tb.getId()); // } return result; }
存储过程
USE [Test] GO /****** 对象: StoredProcedure [dbo].[proc_pages] 脚本日期: 07/18/2012 11:10:18 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[proc_pages] @strTable varchar(50), --表名 @strColumn varchar(50), --按该列来进行分页 @intColType int, --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型 @intOrder bit, --排序,0-顺序,1-倒序 @strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段 @intPageSize int, --每页记录数 @intPageNum int, --指定页 @strWhere varchar(800), --查询条件 @intPageCount int OUTPUT --总页数 AS begin DECLARE @sql nvarchar(4000) --用于构造SQL语句 DECLARE @where1 varchar(800) --构造条件语句 DECLARE @where2 varchar(800) --构造条件语句 IF @strWhere is null or rtrim(@strWhere)='''' -- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格 BEGIN --没有查询条件 print ''asdfasd'' SET @where1='' WHERE '' SET @where2='' '' END ELSE BEGIN --有查询条件 SET @where1='' WHERE (''+@strWhere+'') AND '' SET @where2='' WHERE (''+@strWhere+'') '' END set @strColumn = '' '' + @strColumn + '' '' set @strColumnlist = '' '' + @strColumnlist + '' '' --构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 ) SET @sql=''SELECT @intPageCount=CEILING((COUNT(*)+0.0)/'' + CAST(@intPageSize AS varchar) + '') FROM '' + @strTable + @where2 --执行SQL语句,计算总页数,并将其放入@intPageCount变量中 EXEC sp_executesql @sql ,N''@intPageCount int OUTPUT'',@intPageCount OUTPUT --将总页数放到查询返回记录集的第一个字段前,此语句可省略 --SET @strColumnlist='' ''+Cast(@intPageCount as varchar(30)) + '' as PageCount,'' + @strColumnlist IF @intOrder=0 --构造升序的SQL SET @sql=''SELECT TOP ''+ CAST(@intPageSize AS varchar) + @strColumnlist + '' FROM '' + @strTable + @where1 + @strColumn + ''>(SELECT MAX(''+@strColumn+'') ''+ '' FROM (SELECT TOP ''+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + @strColumn + '' FROM ''+ @strTable+@where2+''ORDER BY ''+@strColumn+'') t) ORDER BY ''+ @strColumn ELSE --构造降序的SQL SET @sql=''SELECT TOP ''+ CAST(@intPageSize AS varchar) + @strColumnlist+ '' FROM ''+ @strTable + @where1 + @strColumn + ''<(SELECT MIN(''+@strColumn+'') ''+ '' FROM (SELECT TOP ''+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + @strColumn + '' FROM ''+ @strTable+@where2+''ORDER BY ''+@strColumn+'' DESC) t) ORDER BY ''+ @strColumn + '' DESC'' IF @intPageNum=1--第一页 SET @sql=''SELECT TOP ''+CAST(@intPageSize AS varchar) + @strColumnlist + '' FROM ''+@strTable+ @where2+''ORDER BY ''+@strColumn+CASE @intOrder WHEN 0 THEN '''' ELSE '' DESC'' END PRINT @sql print @intPageCount --EXEC(@sql) end
数据库名字是Test 表名是tBuilding 存储过程的名字是proc_pages
报错信息是:could not execute native bulk manipulation query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
SQL SERVER 存储过程将 SELECT 数据集赋值给新表某个字段
1、通过创建临时表的方法,将存储过程返回的数据集存入临时表内,表结构和返回的结果集一致,再通过临时表对数据进行操作。
ALTER PROCEDURE [dbo].[PROCEDURE1]
AS
BEGIN
declare @xxx varchar(255), @xxxx INT
declare medical_cursor cursor scroll for
select xxx, xxxx from TB_TABLE
open medical_cursor
fetch next from medical_cursor into @xxx, @xxxx
while @@FETCH_STATUS=0
begin
--创建临时表
declare @TABLE TABLE (
ID int,
ICD VARCHAR(50),
)
INSERT INTO @TABLE exec [PROCEDURE1]@xxx, @xxxx
update TB_TABLE set DiseaseID = (SELECT TOP 1 ID FROM @TABLE
where xxx= @xxx and xxxx= @xxxx)
fetch next from medical_cursor into @xxx, @xxxx
end
close medical_cursor
deallocate medical_cursor
END
Sql Server 存储过程调用存储过程接收输出参数返回值
创建存储过程:
ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] FROM [Northwind].[dbo].[Customers] SET @rowcount=@@rowcount
接收输出参数:
DECLARE @count INT EXECUTE GetCustomers @count OUTPUT PRINT @count
2,带返回值
创建存储过程:
ALTER PROCEDURE [dbo].[GetCustomers] AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] FROM [Northwind].[dbo].[Customers] RETURN @@rowcount
接收返回值:
DECLARE @count INT EXECUTE @count=GetCustomers PRINT @count
以上所述是小编给大家介绍的Sql Server 存储过程调用存储过程接收输出参数返回值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
- sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享
- sql server2008调试存储过程的完整步骤
- SQLServer2008存储过程实现数据插入与更新
- SQLServer存储过程创建和修改的实现代码
- 获取SqlServer存储过程定义的三种方法
- SqlServer存储过程实现及拼接sql的注意点
- 浅析SQL Server的嵌套存储过程中使用同名的临时表怪像
SQL Server 常用存储过程集锦
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
=================分页==========================代码如下:
/*分页查找数据*/
CREATE PROCEDURE [dbo].[GetRecordSet]
@strsql varchar(8000),--查询sql,如select * from [user]
@PageIndex int,--查询当页号
@PageSize int--每页显示记录
AS
set nocount on
declare @p1 int
declare @currentPage int
set @currentPage = 0
declare @RowCount int
set @RowCount = 0
declare @PageCount int
set @PageCount = 0
exec sp_cursoropen @p1 output,@strsql,@scrollopt=1,@ccopt=1,@rowcount=@rowCount output --得到总记录数
select @PageCount=ceiling(1.0*@rowCount/@pagesize) --得到总页数,@currentPage=(@PageIndex-1)*@PageSize+1
select @RowCount,@PageCount
exec sp_cursorfetch @p1,16,@currentPage,@PageSize
exec sp_cursorclose @p1
set nocount off
GO
=========================用户注册============================
/*
用户注册,也算是添加吧
*/
Create proc [dbo].[UserAdd]
(
@loginID nvarchar(50), --登录帐号
@password nvarchar(50),--密码
@email nvarchar(200) --电子信箱
)
as
declare @userID int --用户编号
--登录账号已经被注册
if exists(select loginID from tableName where loginID = @loginID)
begin
return -1;
end
--邮箱已经被注册
else if exists(select email from tableName where email = @email)
begin
return -2;
end
--注册成功
else
begin
select @userID = isnull(max(userID),100000)+1 from tableName
insert into tableName
(userID,loginID,[password],userName,linkNum,address,email,createTime,status)
values
(@userID,@loginID,@password,'',@email,getdate(),1)
return @userID
end
==========================sql server系统存储过程===================
–1.给表中字段添加描述信息
Create table T2 (id int,name char (20))
GO
EXEC sp_addextendedproperty 'MS_Description','Employee ID','user',dbo,'table',T2,'column',id
EXEC sp_updateextendedproperty 'MS_Description','this is a test',id
–2.修改数据库名称
EXEC sp_renamedb 'old_db_name','new_db_name'
–3.修改数据表名称和字段名称
EXEC sp_rename 'old_table_name','new_table_name'–修改数据表名称
EXEC sp_rename 'table_name.[old_column_name]','new_column_name','COLUMN'–修改字段名称
–4.给定存储过程名,获取存储过程内容
exec sp_helptext sp_name
/*以下是有关安全控制的系统存储过程或 sql 语句,详细语法查阅《联机丛书》相关内容*/
–创建新的 sql Server 登录,使用户得以连接使用 sql Server 身份验证的 sql Server。
EXEC sp_addlogin @loginame = '',@passwd = '',@defdb = '',@deflanguage = NULL,@sid = NULL,@encryptopt = NULL
–使 Windows NT 用户或组帐户得以使用 Windows 身份验证连接到 sql Server。
EXEC sp_grantlogin @loginame = ''
–删除 sql Server 登录,以阻止使用该登录名访问 sql Server。
EXEC sp_droplogin @loginame = ''
–阻止 Windows NT 用户或组连接到 sql Server。
EXEC sp_denylogin @loginame = ''
–从 sql Server 中删除用 sp_grantlogin 或 sp_denylogin 创建的 Windows NT 用户或组的登录项。
EXEC sp_revokelogin @loginame = ''
–更改登录的默认数据库。
EXEC sp_defaultdb @loginame = '',@defdb = ''
–更改登录的默认语言。
EXEC sp_defaultlanguage @loginame = '',@language = ''
–添加或更改 sql Server 登录密码。
EXEC sp_password @old = '',@new = '',@loginame = ''
–添加服务器角色新成员。
EXEC sp_addsrvrolemember @loginame = '',@rolename = ''
–添加服务器角色某成员。
EXEC sp_dropsrvrolemember @loginame = '',@rolename = ''
–为 sql Server 登录或 Windows NT 用户或组在当前数据库中添加一个安全帐户,并使其能够被授予在数据库中执行活动的权限(授予默认的“public”数据库角色)。
EXEC sp_grantdbaccess @loginame = '',@name_in_db = NULL
–或
EXEC sp_adduser @loginame = '',@name_in_db = NULL,@grpname = ''
–从当前数据库中删除安全帐户。
EXEC sp_revokedbaccess @name_in_db = ''
–或
EXEC sp_dropuser @name_in_db = ''
–在当前数据库创建新数据库角色。
EXEC sp_addrole @rolename = '',@ownername = ''
–在当前数据库删除某数据库角色。
EXEC sp_droprole @rolename = ''
–在当前数据库中添加数据库角色新成员。
EXEC sp_addrolemember @rolename = '',@membername = ''
–在当前数据库中删除数据库角色某成员。
EXEC sp_droprolemember @rolename = '',@membername = ''
–权限分配给数据库角色、表、存储过程等对象
–1、授权访问
GRANT
–2、拒绝访问
DENY
–3、取消授权或拒绝
REVOKE
–4、Sample(pubs):
GRANT SELECT ON authors TO Limperator
DENY SELECT ON authors TO Limperator
REVOKE SELECT ON authors TO Limperator
====================数据库还原的存储过程============
代码如下:
sql code
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid
from sysprocesses
where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid
into @spid
while @@fetch_status <>-1
begin
exec('kill '+@spid)
fetch next from getspid
into @spid
end
close getspid
deallocate getspid
end
GO
作用:杀掉传入数据库中的活动进程以进行备份还原等独占操作
===================阿拉伯数字转大写中文=============
例:输入12345,程序给出:壹万贰仟叁佰肆拾伍
例:输入10023040,程序给出:壹仟另贰万叁仟另肆拾
解决方案之一(在sqlServer2000中测试通过):
代码如下:
sql code
CREATE FUNCTION fun_cgnum
(@num INT)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @temp INT,@res INT,@i tinyint
DECLARE @str VARCHAR(100),@no VARCHAR(20),@unit VARCHAR(16)
SELECT @str='',@no='另壹贰叁肆伍陆柒捌玖',@unit='拾佰仟万拾佰仟亿'
SET @temp=@num
SELECT @i=0,@res=@temp%10,@temp=@temp/10
WHILE @temp>0
BEGIN
IF @i=0
SET @str=SUBSTRING(@no,@res+1,1)
ELSE
SET @str=SUBSTRING(@no,1)+SUBSTRING(@unit,@i,1)+@str
SELECT @res=@temp%10,@temp=@temp/10
SET @i=@i+1
END
SET @str=SUBSTRING(@no,1)+@str
SET @str=REPLACE(@str,'另拾','另')
SET @str=REPLACE(@str,'另佰','另仟','另万','万')
WHILE @i>0
BEGIN
SET @str=REPLACE(@str,'另另','另')
SET @i=CHARINDEX('另另',@str)
END
SET @str=REPLACE(@str,'万')
SET @str=REPLACE(@str,'亿万','亿')
IF RIGHT(@str,1)='另'
SET @str=LEFT(@str,LEN(@str)-1)
RETURN @str
END
GO
--测试:有0和没有0的情况
SELECT dbo.fun_cgnum(900000000),dbo.fun_cgnum(903002051),dbo.fun_cgnum(903002050)
PS:有兴趣的朋友可以继续考虑有小数点以及添加单位(元/角/分)的情况
今天关于sql-server – 使用存储过程将一些数据插入表中和sqlserver 把存储过程的结果当一个表的分享就到这里,希望大家有所收获,若想了解更多关于hibernate 调用存储过程 报错 数据库是sqlserver、SQL SERVER 存储过程将 SELECT 数据集赋值给新表某个字段、Sql Server 存储过程调用存储过程接收输出参数返回值、SQL Server 常用存储过程集锦等相关知识,可以在本站进行查询。
本文标签: