2

オプションの入力パラメーターと次のような出力パラメーターを持つ SQL Server 2008 R2 データベースにストアド プロシージャがあります。

CREATE PROCEDURE [dbo].[spCreateTicket]
(
    @TrackingCode varchar(25),
    @EmailAddress varchar(250) = null,
    @Ticket varchar(1000),
    @UserID int,
    @TicketID int output
)
AS
    SET NOCOUNT ON

    INSERT INTO dbTicket (TrackingCode, EmailAddress, Ticket, UserID)
        SELECT 
            @TrackingCode, @EmailAddress, @Ticket, @UserID

    SELECT @TicketID = SCOPE_IDENTITY()

    RETURN @TicketID

SSMS でオプションのパラメーターを指定せずにストアド プロシージャを呼び出すと、正常に動作します。

DECLARE @TicketID int

EXEC [dbo].[spCreateTicket]
    @TrackingCode = 'xOCDUv289u403k5h24s5869vK',
    @Ticket = 'Something broke!',
    @UserID = 64307,
    @TicketID = @TicketID OUTPUT

しかし、ASP クラシックで ADODB を使用して同じことを試してみると、次のようになります。

SET cmd = Server.CreateObject ("ADODB.Command")
cmd.ActiveConnection = HelpDeskConnection
cmd.CommandText = "spCreateTicket"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter ("@TrackingCode",adVarChar,adParamInput,25,RandomString(25))
cmd.Parameters.Append cmd.CreateParameter ("@Ticket",adVarChar,adParamInput,1000,Ticket)
cmd.Parameters.Append cmd.CreateParameter ("@UserID",adInteger,adParamInput, ,Session("UserID"))
cmd.Parameters.Append cmd.CreateParameter ("@TicketID",adInteger,adParamOutput)
cmd.Execute
TicketID = cmd.Parameters("@TicketID")

何もせず、@TicketIDleftのままEmptyで、ADODB.Connection には次の NativeError 8162 が含まれています。

「仮パラメーター \"@UserID\" は OUTPUT パラメーターとして宣言されていませんでしたが、要求された出力で実際のパラメーターが渡されました。」

私は常に ADODB を使用して、省略可能なパラメーターを指定せずにストアド プロシージャを呼び出しています。これは ADODB の既知の欠陥ですか、それとも出力パラメータがある場合に機能させるために何か特別なことをする必要がありますか?

4

1 に答える 1