2015-10-06 1 views
1

Если у меня есть хранимая процедура в SQL Server с числом названных входных параметров, все со значениями по умолчанию следующим образом:Укажите только определенные параметры в командных объектах в ADO с помощью VBScript?

CREATE PROCEDURE [dbo].[proc_name] 
( 
    @IN_mode CHAR(1) = NULL, /* 'I','U'*/ 
    @IN_external_identity_id INT = -1, 
    @IN_provider_name VARCHAR(45) = NULL, 
    @IN_login_id VARCHAR(255) = NULL, 
    @IN_email VARCHAR(255) = NULL, 
    @IN_ip VARCHAR(45) = NULL, 
    @IN_first_name VARCHAR(255) = NULL, 
    @IN_last_name VARCHAR(255) = NULL, 
    @IN_json_response_raw VARCHAR(8000) = NULL, 
    @IN_user_id VARCHAR(255) = NULL, 
    @IN_name VARCHAR(255) = NULL 
) 
AS 
    BEGIN 
... 

... и в vbScript я называю процедуру так:

Set oSproc = CreateObject("ADODB.Command") 
With oSproc 
    .ActiveConnection = oConn 
    .CommandText = "bfsp_insert_NEW_EXTERNAL_IDENTITY" 
    .CommandType = adCmdStoredProc 
    With .Parameters 
     .Append oSproc.CreateParameter("@IN_mode", adChar, adParamInput, 1, "I") 
     .Append oSproc.CreateParameter("@IN_external_identity_id", adInteger, adParamInput, 0, -1) '-1 because field isn't needed on new insert 
     .Append oSproc.CreateParameter("@IN_provider_name", adVarChar, adParamInput, 45, "FACEBOOK") 
     .Append oSproc.CreateParameter("@IN_login_id", adVarChar, adParamInput, 255, getInput("fbNewUserName")) 
     .Append oSproc.CreateParameter("@IN_email", adVarChar, adParamInput, 255, oFbUser.email) 
     .Append oSproc.CreateParameter("@IN_ip", adVarChar, adParamInput, 46, getUserIp()) 
     .Append oSproc.CreateParameter("@IN_first_name", adVarChar, adParamInput, 255, oFbUser.first_name) 
     .Append oSproc.CreateParameter("@IN_last_name", adVarChar, adParamInput, 255, oFbUser.last_name) 
     .Append oSproc.CreateParameter("@IN_json_response_raw", adVarChar, adParamInput, 8000, oFbUser.rawJson) 
     .Append oSproc.CreateParameter("@IN_user_id", adVarChar, adParamInput, 255, oFbUser.id) 
     .Append oSproc.CreateParameter("@IN_name", adVarChar, adParamInput, 255, oFbUser.name) 
    End With 
    .Execute 
End With 
iNewExternalIdentityId = oSproc.parameters("@OUTPUT_originalId").Value 'grabbing the new EXTERNAL_IDENTITY.ID 
Set oSproc = Nothing 

Я заметил, что имя параметра в инструкции параметра create vbscript не связывается по имени с переменной в sproc. Кажется, что оно совпадает с порядковым положением, например. Параметр 1 соответствует параметру 1 и т. д. Если я оставил один, скажем, посередине где-нибудь, все остальные параметры будут назначены неверной входной переменной в sproc.

Как создать параметры в коде vbscript, чтобы я мог отправлять только параметры выбора, которые мне нужны, и все еще правильно их сопоставлять с параметрами в процедуре?

+1

Попробуйте '.NamedParameters = true', за https://msdn.microsoft.com/library/ms675840 (отказ от ответственности: не испытано). –

+0

В противном случае другой альтернативой было бы добавить параметр (ы) без значений (или null) вместо того, чтобы опускать параметр. – tgolisch

+0

@ jeroen-mostert - это сработало ... Я создаю официальный ответ с вашим предложением – GWR

ответ

0

Я отправляю официальный ответ, содержащий предложение от @ jeroen-mostert.

Все, что необходимо для передачи параметров по имени, это добавить свойство namedParameters к объекту команды и установить его на True следующим образом. Строка 3 в приведенном ниже фрагменте был добавлен, в противном случае оно такое же, как оригинал:

Set oSproc = CreateObject("ADODB.Command") 
With oSproc 
    .NamedParameters = True 
    .ActiveConnection = oConn 
    .CommandText = "bfsp_insert_NEW_EXTERNAL_IDENTITY" 
    .CommandType = adCmdStoredProc 
    With .Parameters 
     .Append oSproc.CreateParameter("@IN_mode", adChar, adParamInput, 1, "I") 
     .Append oSproc.CreateParameter("@IN_external_identity_id", adInteger, adParamInput, 0, -1) '-1 because field isn't needed on new insert 
     .Append oSproc.CreateParameter("@IN_provider_name", adVarChar, adParamInput, 45, "FACEBOOK") 
     .Append oSproc.CreateParameter("@IN_login_id", adVarChar, adParamInput, 255, getInput("fbNewUserName")) 
     .Append oSproc.CreateParameter("@IN_email", adVarChar, adParamInput, 255, oFbUser.email) 
     .Append oSproc.CreateParameter("@IN_ip", adVarChar, adParamInput, 46, getUserIp()) 
     .Append oSproc.CreateParameter("@IN_first_name", adVarChar, adParamInput, 255, oFbUser.first_name) 
     .Append oSproc.CreateParameter("@IN_last_name", adVarChar, adParamInput, 255, oFbUser.last_name) 
     .Append oSproc.CreateParameter("@IN_json_response_raw", adVarChar, adParamInput, 8000, oFbUser.rawJson) 
     .Append oSproc.CreateParameter("@IN_user_id", adVarChar, adParamInput, 255, oFbUser.id) 
     .Append oSproc.CreateParameter("@IN_name", adVarChar, adParamInput, 255, oFbUser.name) 
    End With 
    .Execute 
End With 
iNewExternalIdentityId = oSproc.parameters("@OUTPUT_originalId").Value 'grabbing the new EXTERNAL_IDENTITY.ID 
Set oSproc = Nothing