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 回答