2

説明の組み立てを必要とする在庫トランザクションを作成するためのストアド プロシージャがあります。他のインベントリ ストアド プロシージャも同様に記述を組み立てる必要があるため、ヘルパー ストアド プロシージャを作成しようとしています。

このヘルパーは、標準パラメーターを使用して説明を作成します。私が抱えている問題は、文字列Descriptionを在庫トランザクションに戻すことです。

Inventory トランザクションは、次の方法でヘルパーを呼び出します。

declare @TransDescription nvarchar(256) 
declare @TransDescOut nvarchar(256)

EXEC [dbo].[sp_KF_Helpers_CreateInvTransDescription] 
     @TransactionTypeID, @UserName, @OwnerTypeID, @OwnerID, 
     @TransDesc = @TransDescOut OUTPUT

SET @TransDescription = @TransDescOut

次に@TransDescription、列データに挿入するための値として使用します。

ヘルパー コードは次のとおりです。

    CREATE PROCEDURE [dbo].[sp_KF_Helpers_CreateInvTransDescription]
    (   @TransactionTypeID int,
        @UserName nvarchar(256),
        @OwnerTypeID int,
        @OwnerID int,
        @TransDesc varchar(256) OUTPUT
    )
    AS
    BEGIN
    SET NOCOUNT ON;

declare @rslt int = 0
declare @strTyepID varchar(256) = @TransactionTypeID
declare @strOwnerID varchar(256) = @OwnerID
declare @intOwnerTypeID int = @OwnerTypeID
declare @OwnerStr varchar(256) = 'KF_'
declare @OwnerIDStr varchar(256) = (select Description from KF_OwnerType where ID = @intOwnerTypeID)

select @OwnerStr = @OwnerStr + @OwnerIDStr
declare @sql1 nvarchar(4000)

Select @sql1 = 'Select Top 1 (a.Description + '' - '' + ' + @OwnerStr + '.Name) TransDesc 
from KF_InventoryTransactionType a, KF_OwnerType c, ' + @OwnerStr + ' 
where a.ID = ' + @strTyepID + ' and ' 
+ @OwnerStr + '.ID = ' + @strOwnerID 

exec SP_EXECUTESQL @sql1, N'@TransDesc varchar output ', @TransDesc output
 End

ご覧のとおり、動的 SQL を使用して記述を生成しています。問題は、ヘルプ コードが正しい説明を生成するが、それを出力として返さないことです。

出力の説明を返すためのスコープが失われている理由または場所を知っている人はいますか?

4

1 に答える 1

4

変数を割り当てるのを忘れました。試す:

select top 1 @TransDesc = a.Description + '' - '' + ' + @OwnerStr + '.Name
...

また、動的スクリプト(@TransDesc)のパラメーターを宣言している部分を変更しないと、別の問題が発生します。現在、パラメータは次のように宣言されています。

@TransDesc varchar output

これ

@TransDesc varchar(1) output

ほとんどの場合、

@TransDesc varchar(256) output

代わりは。

于 2012-06-07T17:40:15.617 に答える