我想在一个存储过程中同时返回一个记录集和一个输出参数,如下:Create Proc p1
 @total float output
As--Set Nocount on  --不知这句话的有无是否有影响select @total=sum(总成绩) from TABLE1
select * from TABLE1Go在vb中
dim rst
dim adocmd
dim i as floatset rst=server.CreateObject("adodb.recordset")
set adocmd=server.CreateObject("adodb.command")
 adocmd.CommandType = adCmdStoredProc
 adocmd.CommandText = "p1"
 adoCmd.Parameters.Append adocmd.CreateParameter ("@total",adDouble,adParamOutput)
set rst=adocmd.execute
i=.Parameters("@total").Value但是测试时只返回了记录集,而没有返回@total的值,为什么?
使用什么方法可以实现我的目的?
谢谢!!!

解决方案 »

  1.   

    可以呀,如:Create Proc p1
     @total float output
    As
    begin
    --Set Nocount on  --可选
    select @total=sum(总成绩) from TABLE1
    select * from TABLE1
    --Set Nocount off --可选end
    Go    
    Dim cn As New adodb.Connection
    Dim rst As New adodb.Recordset
    Dim adocmd As New adodb.Command
    Dim i As Integer cn.Open "........."
     adocmd.ActiveConnection = cnDatabase
     adocmd.CommandType = adCmdStoredProc
     adocmd.CommandText = "p1"
     adocmd.Parameters.Append adocmd.CreateParameter("@total", adDouble, adParamOutput)
     Set rst = adocmd.Execute
     i = adocmd.Parameters("@total").Value
      

  2.   

    Create Proc p1
     @total float output
    As--Set Nocount on  --不知这句话的有无是否有影响select @total=sum(总成绩) from TABLE1
        Return @total
    go
    //
    dim total as floatadocmd.ActiveConnection = cnDatabase
     adocmd.CommandType = adCmdStoredProc
     adocmd.CommandText = "p1"
     adocmd.execute
     total=adocmd.Parameters("@total")
      

  3.   

    '试试将调用改为:
    dim rst
    dim adocmd
    dim i as floatset rst=server.CreateObject("adodb.recordset")
    set adocmd=server.CreateObject("adodb.command")
    adocmd.CommandType = adCmdStoredProc
    adocmd.CommandText = "p1"
    adoCmd.Parameters.Rfresh
    set rst=adocmd.execute
    i=adoCmd.Parameters("@total").Value
      

  4.   

    试过了你的语句,在查询分析器中可以返回记录集和输出参数,但是在vb中就返回不了输出参数。你可以把输出参数挂到记录集的最后,然后再输出记录集,代码如下:create procedure test
    as
    declare @total numeric(20,3)
    select @total=sum(总成绩) from TABLE1
    select *, @total as tt from TABLE1
    go
    在vb中
    dim rst
    dim adocmd
    dim i as floatset rst=server.CreateObject("adodb.recordset")
    set adocmd=server.CreateObject("adodb.command")
     adocmd.CommandType = adCmdStoredProc
     adocmd.CommandText = "p1"
     adoCmd.Parameters.Append adocmd.CreateParameter ("@total",adDouble,adParamOutput)
    set rst=adocmd.execute
    '最后的字段是输出参数的值
    i=rst.fields(rst.field.count-1)
      

  5.   

    更正:
    create procedure pl
    as
    declare @total numeric(20,3)
    select @total=sum(总成绩) from TABLE1
    select *, @total as tt from TABLE1
    go
      

  6.   

    '可能是限制,测试过,无论怎样调整存储过程,都不行,一定要改调用方法:'这样调用就可以得到结果dim rst
    dim adocmd
    dim i as floatset rst=server.CreateObject("adodb.recordset")
    set adocmd=server.CreateObject("adodb.command")
    adocmd.ActiveConnection = 数据库连接字符串
    adocmd.CommandType = adCmdStoredProc
    adocmd.CommandText = "p1"
    adoCmd.Parameters.Refresh
    Set rst = adocmd.Execute  '第一次调用,得到记录集
    adocmd.Execute '再调用,得到返回值
    i = adocmd.Parameters("@total").Value