我有一个用于创建需要组装描述的库存交易的存储过程。由于其他库存存储过程也需要类似地组装它们的描述,因此我正在尝试创建一个辅助存储过程。
该助手将使用标准参数并构建描述。我遇到的麻烦是将字符串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 来生成描述。问题是帮助代码生成了正确的描述,但没有将其作为输出传回。
任何人都知道我为什么或在哪里失去了返回输出描述的范围?