Возврат SCOPE_IDENTITY () с использованием Adodb.Command - PullRequest
2 голосов
/ 30 августа 2011

У меня есть оператор Insert (хранимая процедура), который возвращает SCOPE_IDENTITY () после вставки, однако я пытаюсь выяснить, как его вернуть после использования запроса ADODB.Command в Classic ASP.

В 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

Должен ли я сделать что-то подобноедо того, как я set SQLCOMM=Nothing?

NewID = SQLCOMM("LastID").Value

ИЛИ ... можно ли выполнить хранимую процедуру вставки / обновления из Adodb.Recordset вместо ADODB.Command вместо?

    The example above gives the following error message:
    ADODB.Command error '800a0bb9'

    Arguments are of the wrong type, are out of acceptable range, 
    or are in conflict with one another. 

ошибка возвращается из-за этой строки кода:

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

1 Ответ

0 голосов
/ 30 августа 2011

Ваш командный подход к вызову хранимой процедуры в порядке.Все, что вам нужно сделать, это добавить дополнительный выходной параметр к объекту команды.(Я не делал 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)

или определите константы.

...