Sql server 从存储过程classic asp返回值和结果集

Sql server 从存储过程classic asp返回值和结果集,sql-server,vbscript,asp-classic,adodb,Sql Server,Vbscript,Asp Classic,Adodb,我想从classic ASP中的存储过程中获取返回代码和结果集 CREATE PROCEDURE CheckEmployeeId @EmployeeName nvarchar(255) AS BEGIN SET NOCOUNT ON; DECLARE @Exists INT , @RowCount Int = 0 , @ReturnValue Int = 1 SELECT EmployeeId FROM Employees WHE

我想从classic ASP中的存储过程中获取返回代码和结果集

CREATE PROCEDURE CheckEmployeeId
@EmployeeName nvarchar(255)
AS
BEGIN
    SET NOCOUNT ON;
DECLARE 
      @Exists       INT 
    , @RowCount     Int = 0
    , @ReturnValue  Int = 1


SELECT EmployeeId FROM Employees WHERE Name = @EmployeeName
set @RowCount = @@ROWCOUNT

if (@RowCount <> 1)
BEGIN
    SET @ReturnValue = 2 
END
ELSE
BEGIN
    SET @ReturnValue = 1
END

RETURN @ReturnValue 
END
或者使用此选项来获取结果集

Set cmd = CreateObject("ADODB.Command")
with cmd
    .ActiveConnection = cnnstr
    .CommandType = adCmdStoredProc
    .CommandText = "CheckEmployeeId"
    .Parameters.Refresh
    .Parameters("@EmployeeName")    = EmployeeName
    Set rst = .Execute()
end with

有什么办法可以同时做到这两个呢?

你已经在做了,只要把两者结合起来就行了

Set cmd=CreateObject(“ADODB.Command”)
使用cmd
.ActiveConnection=cnnstr
.CommandType=adCmdStoredProc
.CommandText=“CheckEmployeeId”
.Parameters.Refresh
.Parameters(“@EmployeeName”)=EmployeeName
Set rst=.Execute()
以
'在返回返回值之前,需要关闭记录集。
RetVal=cmd.Parameters(“@RETURN_VALUE”)
你不需要选择其中一个,因为它们彼此独立。唯一的问题是它们返回的顺序,请记住,在关闭所有返回的记录集之前,
OUTPUT
return
值都是不可访问的

就我个人而言,我更喜欢通过将它们存储为二维数组来直接关闭它们

Set cmd=CreateObject(“ADODB.Command”)
使用cmd
.ActiveConnection=cnnstr
.CommandType=adCmdStoredProc
.CommandText=“CheckEmployeeId”
.Parameters.Refresh
.Parameters(“@EmployeeName”)=EmployeeName
Set rst=.Execute()
如果不是rst.EOF,则data=rst.GetRows()
调用rst.Close()
以
RetVal=cmd.Parameters(“@RETURN_VALUE”)
'访问记录集数组
如果是数组(数据),则
'返回第一列第一行。
响应。写入数据(0,0)
如果结束

返回值旨在返回执行的状态代码,而不是返回值。如果要从过程接收返回的值,应使用输出参数。@SeanLange他们使用它返回执行状态,2表示无记录,1表示部分记录。@Lankymart我将礼貌地不同意。这不是返回执行状态,而是返回逻辑值。这是我们应该使用输出参数的一个很好的例子。@SeanLange老实说,你在吹毛求疵,你想学究,这取决于你自己。即使是微软也不同意-参见-示例B.返回状态码。@Lankymart我当然没有采取任何其他方式。正如您所说,这主要是首选项。很抱歉,我总是得到一个vartype为0(vbEmpty-表示为空(未初始化))@davideliott,这是因为必须先关闭
记录集
对象,然后才能读取任何
输出
返回
值。具体请参见注释框-“如果命令包含Value属性为空的参数,并且您从该命令创建了一个记录集,请确保在检索Value属性之前先关闭该记录集。”
Set cmd = CreateObject("ADODB.Command")
with cmd
    .ActiveConnection = cnnstr
    .CommandType = adCmdStoredProc
    .CommandText = "CheckEmployeeId"
    .Parameters.Refresh
    .Parameters("@EmployeeName")    = EmployeeName
    Set rst = .Execute()
end with