2015-10-06 59 views
1

如果我在SQL Server中的存储过程与多个名为输入参数,全部用默认值如下:只用VBScript在ADO的命令对象中指定某些参数?

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 

我注意到vbscript创建参数语句中的参数名称并不按名称链接到存储区中的变量。它似乎根据序号位置进行匹配,例如,参数1匹配参数1,依此类推。如果我把它留在某处,那么所有剩下的参数将被分配给存储区中错误的输入变量。

如何在vbscript代码中创建参数,以便只发送我需要的选择参数,并仍然使它们与过程中的参数正确匹配?

+1

尝试'.NamedParameters = TRUE',每https://msdn.microsoft.com/library/ms675840(声明:不测试)。 –

+0

否则,另一种方法是将参数添加为无值(或为空)而不是省略参数。 – 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