GVKun编程网logo

sql-server – 使用存储过程将一些数据插入表中(sqlserver 把存储过程的结果当一个表)

2

对于sql-server–使用存储过程将一些数据插入表中感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sqlserver把存储过程的结果当一个表,并且为您提供关于hibernate调用存储

对于sql-server – 使用存储过程将一些数据插入表中感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sqlserver 把存储过程的结果当一个表,并且为您提供关于hibernate 调用存储过程 报错 数据库是sqlserver、SQL SERVER 存储过程将 SELECT 数据集赋值给新表某个字段、Sql Server 存储过程调用存储过程接收输出参数返回值、SQL Server 常用存储过程集锦的宝贵知识。

本文目录一览:

sql-server – 使用存储过程将一些数据插入表中(sqlserver 把存储过程的结果当一个表)

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

解决方法

如果您将表定义设置为具有IDENTITY列,例如IDENTITY(1,1)然后在INSERT INTO语句中不包含MyId. IDENTITY的重点是它将下一个未使用的值作为主键值.
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

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 数据集赋值给新表某个字段

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 存储过程调用存储过程接收输出参数返回值

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 常用存储过程集锦

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 常用存储过程集锦等相关知识,可以在本站进行查询。

本文标签: