説明の組み立てを必要とする在庫トランザクションを作成するためのストアド プロシージャがあります。他のインベントリ ストアド プロシージャも同様に記述を組み立てる必要があるため、ヘルパー ストアド プロシージャを作成しようとしています。
このヘルパーは、標準パラメーターを使用して説明を作成します。私が抱えている問題は、文字列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 を使用して記述を生成しています。問題は、ヘルプ コードが正しい説明を生成するが、それを出力として返さないことです。
出力の説明を返すためのスコープが失われている理由または場所を知っている人はいますか?