--(三)、数据集返回值select * from table1 where age = @parm1 --请问,如何得到三类返回值?--定义返回结果保存的临时表(因为是返回记录集,所以要用临时表) create table #re( name varchar(30), age integer, primary key(name, age) )--调用返回结果 declare @re varchar(30) insert #re exec proc1 1,@re out--显示结果 select * from #re--处理完成后删除临时表 drop table #re
declare @re1 varchar(30) declare @re2 int select @re1='',@re2=''1. exec proc1 @re1 output2. exec @re2=proc1 @re1 output3.如果只有一个select语句的话,可以这样返回 select * into #tmp from OPENROWSET('MSDASQL', 'DRIVER={SQL Server};SERVER=poka;UID=sa;PWD=','declare @re3 varchar(30) exec YourDB.dbo.proc1 @re3 ')
用传游标参数的方法,在存储过程里定义并打开游标, 如果 LOCAL和 GLOBAL 都没有指定,则数据库选项default to local cursor 控制由 DECLARE CURSOR 语句使用的默认值。如果 default to local cursor 为 true,Transact-SQL 游标默认为是局部的。如果此选项为 false,Transact-SQL 游标默认为是全局游标。在 SQL Server 2000版中,default to local cursors 选项默认为 FALSE,以便与 SQL Server 早期版本中的内容匹配。使用 DECLARE 和 OPEN 局部游标的存储过程可以将游标传递出去以供要求调用的存储过程、触发器或批处理使用。这可以通过使用由新的 CURSOR VARYING 数据类型定义的 OUTPUT 参数来实现。游标变量只能用作 OUTPUT 参数。不能将它们用于输入参数。当存储过程完成时游标必须是打开的,以便将游标返回 OUTPUT 参数。也可以通过新的 CURSOR 数据类型来声明局部变量以包含对局部游标的引用。USE pubs GO /* Create a procedure with a cursor output parameter. */ CREATE PROCEDURE OpenCrsr @OutCrsr CURSOR VARYING OUTPUT ASSET @OutCrsr = CURSOR FOR SELECT au_lname FROM authors WHERE au_lname LIKE 'S%'OPEN @OutCrsr GO/* Allocate a cursor variable. */ DECLARE @CrsrVar CURSOR/* Execute the procedure created earlier to fill the variable. */ EXEC OpenCrsr @OutCrsr = @CrsrVar OUTPUT/* Use the variable to fetch the rows from the cursor. */ FETCH NEXT FROM @CrsrVar WHILE (@@FETCH_STATUS <> -1) BEGIN FETCH NEXT FROM @CrsrVar ENDCLOSE @CrsrVarDEALLOCATE @CrsrVar GO数据库 API 不支持存储过程中的游标输出参数。不能直接从数据库 API 函数执行包含游标输出参数的存储过程。而只能从另一个存储过程、触发器、Transact-SQL 批处理或脚本执行这些存储过程。只有在明确释放时或关闭连接时 GLOBAL 游标才可用。创建 LOCAL 游标的存储过程、触发器或批处理终止时将隐性释放 LOCAL 游标,除非游标已作为参数返回。当调用过程的代码中引用游标的参数或变量超出作用域时,将隐性地释放 LOCAL 游标。
declare @re int,@parm2 varchar(30)
exec @re=proc1 1,@parm2 out
select 返回结果=@re
--(三)、数据集返回值select * from table1 where age = @parm1
--请问,如何得到三类返回值?--定义返回结果保存的临时表(因为是返回记录集,所以要用临时表)
create table #re(
name varchar(30),
age integer,
primary key(name, age)
)--调用返回结果
declare @re varchar(30)
insert #re exec proc1 1,@re out--显示结果
select * from #re--处理完成后删除临时表
drop table #re
declare @re2 int
select @re1='',@re2=''1. exec proc1 @re1 output2. exec @re2=proc1 @re1 output3.如果只有一个select语句的话,可以这样返回
select * into #tmp from OPENROWSET('MSDASQL',
'DRIVER={SQL Server};SERVER=poka;UID=sa;PWD=','declare @re3 varchar(30) exec YourDB.dbo.proc1 @re3 ')
如果 LOCAL和 GLOBAL 都没有指定,则数据库选项default to local cursor 控制由 DECLARE CURSOR 语句使用的默认值。如果 default to local cursor 为 true,Transact-SQL 游标默认为是局部的。如果此选项为 false,Transact-SQL 游标默认为是全局游标。在 SQL Server 2000版中,default to local cursors 选项默认为 FALSE,以便与 SQL Server 早期版本中的内容匹配。使用 DECLARE 和 OPEN 局部游标的存储过程可以将游标传递出去以供要求调用的存储过程、触发器或批处理使用。这可以通过使用由新的 CURSOR VARYING 数据类型定义的 OUTPUT 参数来实现。游标变量只能用作 OUTPUT 参数。不能将它们用于输入参数。当存储过程完成时游标必须是打开的,以便将游标返回 OUTPUT 参数。也可以通过新的 CURSOR 数据类型来声明局部变量以包含对局部游标的引用。USE pubs
GO
/* Create a procedure with a cursor output parameter. */
CREATE PROCEDURE OpenCrsr @OutCrsr CURSOR VARYING OUTPUT ASSET @OutCrsr = CURSOR FOR
SELECT au_lname
FROM authors
WHERE au_lname LIKE 'S%'OPEN @OutCrsr
GO/* Allocate a cursor variable. */
DECLARE @CrsrVar CURSOR/* Execute the procedure created earlier to fill
the variable. */
EXEC OpenCrsr @OutCrsr = @CrsrVar OUTPUT/* Use the variable to fetch the rows from the cursor. */
FETCH NEXT FROM @CrsrVar
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT FROM @CrsrVar
ENDCLOSE @CrsrVarDEALLOCATE @CrsrVar
GO数据库 API 不支持存储过程中的游标输出参数。不能直接从数据库 API 函数执行包含游标输出参数的存储过程。而只能从另一个存储过程、触发器、Transact-SQL 批处理或脚本执行这些存储过程。只有在明确释放时或关闭连接时 GLOBAL 游标才可用。创建 LOCAL 游标的存储过程、触发器或批处理终止时将隐性释放 LOCAL 游标,除非游标已作为参数返回。当调用过程的代码中引用游标的参数或变量超出作用域时,将隐性地释放 LOCAL 游标。