SQL Server 2000的存储过程返回结果集不象 Oracle 那么复杂,不需要定义输出的游标,直接在存储过程内部执行查询语句,返回的结果集即可作为输出:create procedure sp_test(@P_UserID int,@P_CheckTime datetime,...)
as
begin
...
--以下查询语句的结果集即可被存储过程外部的程序引用
select * from table 1 where user_id = @P_UserID
...
end
as
begin
...
--以下查询语句的结果集即可被存储过程外部的程序引用
select * from table 1 where user_id = @P_UserID
...
end
as
begin
select * from 工作人员 where 工作人员编号 <= @userid;
end
:libin_ftsafe(子陌红尘) :
现在的问题是,已有的ORACLE处理方式大都是写在参数回OUT出来.如果改写工作量
相当大(存储过程及客户端代码).
而且,返回2个游标,在SQLSERVER里没法处理吗?那就更麻烦.
CREATE PROCEDURE PKG_MESSAGE_TestCur(@userid integer,@os cursor varying output)
as
begin
declare os cursor for
select * from 工作人员 where 工作人员编号 <= @userid
set @os=os
end
------------------------------------------------
CREATE PROCEDURE OpenCrsr
@OutCrsr CURSOR VARYING OUTPUT,
@OutCrsr1 CURSOR VARYING OUTPUT
ASSET @OutCrsr = CURSOR FOR
SELECT au_lname
FROM authors
WHERE au_lname LIKE 'S%'SET @OutCrsr1 = CURSOR FOR
SELECT au_lname
FROM authors
WHERE au_lname LIKE 'A%'OPEN @OutCrsr
OPEN @OutCrsr1
GO
/*== 在sql联机帮助上有如下的话,不知道是否意味着sql定义的游标输出参数不能在程序中调用 ==*/使用 cursor 数据类型的参数
存储过程只能将 cursor 数据类型用于 OUTPUT 参数。如果为某个参数指定了 cursor 数据类型,也必须指定 VARYING 和 OUTPUT 参数。如果为某个参数指定了 VARYING 关键字,则数据类型必须是 cursor,并且必须指定 OUTPUT 关键字。说明 cursor 数据类型不能通过数据库 API(例如 OLE DB、ODBC、ADO 和 DB-Library)绑定到应用程序变量上。因为必须先绑定 OUTPUT 参数,应用程序才可以执行存储过程,所以带有 cursor OUTPUT 参数的存储过程不能通过数据库 API 调用。只有将 cursor OUTPUT 变量赋值给 Transact-SQL 局部 cursor 变量时,才可以通过 Transact-SQL 批处理、存储过程或触发器调用这些过程。
谢谢回答,我在MSDN上也看到了这段话,我想大概就是说不被在客户端访问了吧.
那难道没其它办法在客户端调用一个存储过程得到2个游标了吗>