2
我有一個存儲過程,用於創建需要彙編描述的庫存事務。由於其他庫存存儲過程也需要類似地組裝它們的描述,因此我試圖創建一個輔助存儲過程。從動態SQL返回存儲過程字符串參數的範圍問題
該幫手將使用標準參數並構建描述。我遇到的麻煩是將字符串Description
返回到庫存交易。
一個庫存交易調用助手這樣:
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生成描述。問題是幫助代碼會生成正確的描述,但不會將其作爲輸出傳回。
任何人都知道我爲什麼或在哪裏丟失返回輸出描述的範圍?
我已經做出了這些更正,但它仍然不會將描述返回到頂層。 –
試試'SELECT @ TransDescOut'而不是'SET'? – Andomar
在調試中,我注意到@TransDescOut沒有值。因此SELECT或SET並沒有什麼不同。 問題可能與助手的執行方式有關嗎? –