我有一个存储过程,用于创建需要汇编描述的库存交易。由于其他库存存储过程也需要类似地组装它们的描述,我试图创建一个帮助程序存储过程。
此帮助程序将使用标准参数并构造描述。我遇到的麻烦是将字符串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生成描述。问题是帮助代码生成了正确的描述,但没有将其作为输出传回。
任何人都知道为什么或在哪里我失去了返回输出描述的范围?
答案 0 :(得分:4)
您忘了分配变量。尝试:
select top 1 @TransDesc = a.Description + '' - '' + ' + @OwnerStr + '.Name
...
此外,更改声明动态脚本参数的部分(@TransDesc
),否则您将遇到另一个问题。目前,参数声明如下:
@TransDesc varchar output
@TransDesc varchar(1) output
最有可能的,应该是
@TransDesc varchar(256) output
代替。