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

解决方案 »

  1.   

    楼主的存储过程改成如下即可:CREATE  PROCEDURE PKG_MESSAGE_TestCur(@userid integer)
    as
    begin
       select * from 工作人员 where 工作人员编号 <= @userid;
    end
      

  2.   

    终于有回音了.
    :libin_ftsafe(子陌红尘) :
    现在的问题是,已有的ORACLE处理方式大都是写在参数回OUT出来.如果改写工作量
    相当大(存储过程及客户端代码).
    而且,返回2个游标,在SQLSERVER里没法处理吗?那就更麻烦.
      

  3.   

    :libin_ftsafe(子陌红尘) :把MSN啥的贴出来吧.晚上请教一下.
      

  4.   

    应该是一样吧,把游标作为参数输出:
    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
      

  5.   

    pbsql(风云) :这样写好像没法在客户端用ADO访问到.
      

  6.   

    可以返回2个游标,如楼下的例子:
    ------------------------------------------------
    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
      

  7.   

    SQL SERVER 中的游标变量就是那样定义然后赋值的,没法在客户端用ADO访问到是不是你那里处理得不对呢?
      

  8.   

    有例子吗?在客户端用ADO访问?
      

  9.   

    数据库中创建带多个输出参数的存储过程,以及调用这种存储过程就会程序中调用就不会
    /*== 在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 批处理、存储过程或触发器调用这些过程。
      

  10.   

    To zjcxc(邹建):
    谢谢回答,我在MSDN上也看到了这段话,我想大概就是说不被在客户端访问了吧.
    那难道没其它办法在客户端调用一个存储过程得到2个游标了吗>