Sql server 使用Adodb.Command返回作用域\标识()

Sql server 使用Adodb.Command返回作用域\标识(),sql-server,tsql,ado,Sql Server,Tsql,Ado,我有一个Insert语句存储过程,它在Insert之后返回SCOPE_标识,但是,我正在尝试找出在经典ASP中使用ADODB.Command请求之后如何返回它 SP在末尾包含以下内容: SET @LastID = SCOPE_IDENTITY() -- @LastID is an INT OUTPUT param. 这是在经典ASP代码中处理插入查询时的调用: set SQLCOMM = Server.CreateObject("ADODB.Command") SQLCOMM.ActiveCo

我有一个Insert语句存储过程,它在Insert之后返回SCOPE_标识,但是,我正在尝试找出在经典ASP中使用ADODB.Command请求之后如何返回它

SP在末尾包含以下内容:

SET @LastID = SCOPE_IDENTITY() -- @LastID is an INT OUTPUT param.
这是在经典ASP代码中处理插入查询时的调用:

set SQLCOMM = Server.CreateObject("ADODB.Command")
SQLCOMM.ActiveConnection = CONNSTRING
SQLCOMM.CommandText = "Insert_SP_Returns_ScopeID"
SQLCOMM.CommandType = 1
SQLCOMM.CommandTimeout = 0
SQLCOMM.Prepared = true

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)
SQLCOMM.Parameters.Add(LastIDParameter)

SQLCOMM.Execute() 

LastID = LastIDParameter.Value

set SQLCOMM=Nothing
在设置SQLCOMM=Nothing之前,我是否要执行类似的操作

或者。。。是否可以从Adodb.Recordset而不是Adodb.Command执行Insert/Update存储过程

由于以下代码行,正在返回错误:

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)

调用存储过程的命令方法很好。您所要做的就是向command对象添加一个额外的输出参数。我已经多年没有做过任何vbscript了,所以我不确定是否应该显式地键入变量

在VB脚本中

set SQLCOMM = Server.CreateObject("ADODB.Command") 
SQLCOMM.ActiveConnection = CONNSTRING 
SQLCOMM.CommandText = "Insert_SP_Returns_ScopeID" 
SQLCOMM.CommandType = 1 
SQLCOMM.CommandTimeout = 0 
SQLCOMM.Prepared = true 

Dim LastIDParameter
Dim LastID

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)
SQLCOMM.Parameters.Add(LastIDParameter)

SQLCOMM.Execute() 

LastID = LastIDParameter.Value

set SQLCOMM=Nothing 
然后在存储过程中

CREATE PROCEDURE Insert_SP_Returns_ScopeID

@Value1 int,
@Value2 int,
@LastID int OUTPUT

AS

INSERT INTO TableName(Value1,Value2) VALUES (@Value1,@Value2)

SET @LastID = SCOPE_IDENTITY()
编辑:您可能需要查找adInteger、adParamOutput的值,并使用这些值,因为可能没有为您的环境定义常量。如果是这样,请使用

SQLCOMM.CreateParameter("@LastID",3,2)

或者定义常量。

调用存储过程的命令方法很好。您所要做的就是向command对象添加一个额外的输出参数。我已经多年没有做过任何vbscript了,所以我不确定是否应该显式地键入变量

在VB脚本中

set SQLCOMM = Server.CreateObject("ADODB.Command") 
SQLCOMM.ActiveConnection = CONNSTRING 
SQLCOMM.CommandText = "Insert_SP_Returns_ScopeID" 
SQLCOMM.CommandType = 1 
SQLCOMM.CommandTimeout = 0 
SQLCOMM.Prepared = true 

Dim LastIDParameter
Dim LastID

LastIDParameter = SQLCOMM.CreateParameter("@LastID",adInteger,adParamOutput)
SQLCOMM.Parameters.Add(LastIDParameter)

SQLCOMM.Execute() 

LastID = LastIDParameter.Value

set SQLCOMM=Nothing 
然后在存储过程中

CREATE PROCEDURE Insert_SP_Returns_ScopeID

@Value1 int,
@Value2 int,
@LastID int OUTPUT

AS

INSERT INTO TableName(Value1,Value2) VALUES (@Value1,@Value2)

SET @LastID = SCOPE_IDENTITY()
编辑:您可能需要查找adInteger、adParamOutput的值,并使用这些值,因为可能没有为您的环境定义常量。如果是这样,请使用

SQLCOMM.CreateParameter("@LastID",3,2)

或者定义常量。

实际上,我在这方面遇到了一个错误:ADODB.Command error“800a0bb9”参数的类型错误,超出了可接受的范围,或者相互冲突。导致错误的行:lastdParameter=SQLCOMM。CreateParameter@LastID,adInteger,adparamoutput实际上,我在这方面遇到了一个错误:ADODB.Command error'800a0bb9'参数的类型错误,超出了可接受的范围,或者彼此冲突。导致错误的行:lastdParameter=SQLCOMM。CreateParameter@LastID,ADPTEGER,ADPARAME输出