存储过程中的存储过程 NVARCHAR 输出值

Posted

技术标签:

【中文标题】存储过程中的存储过程 NVARCHAR 输出值【英文标题】:Stored Procedure within a Stored Procedure NVARCHAR output value 【发布时间】:2018-09-25 07:15:46 【问题描述】:

我有一个存储过程,它返回一个这样写的 nvarchar 值:

ALTER PROCEDURE [dbo].[GetLastVouchNumber]
  @returnVal nvarchar(255) output

AS
BEGIN

SET @returnVal = ( SELECT CONCAT('I',VOUCHNO+1)
FROM TABVOU
WHERE VOUCHER = 'VOUCHER#')


END

我正在尝试在另一个过程中使用此过程的输出值。这就是我尝试编写这个新程序的方式:

ALTER PROCEDURE [dbo].[MassAdjInsertIntoYTDTRNI]
 @inputPeriod nvarchar(255),
 @inputUserId nvarchar(255)
AS
BEGIN
 DECLARE @resultOrdNo nvarchar (255)
 DECLARE @newOrdNo nvarchar(255)

 EXEC @newOrdNo = GetLastVouchNumber @resultOrdNo

 INSERT INTO  YTDTRNI(TRCDE,PROD,WH,DESCR,UCOST,TCOST,DRAC,CRAC,REM,QTY,UM,ORDNO,TRDATE,SYSDATE,PERIOD,USERID)
 SELECT 'AJ',PROD,WH,DESCR,0,-TCOST,STKGL,COSGL,'MASS ADJUSTMENT',0,UM,@newOrdNo, GETDATE(),GETDATE(),@inputPeriod,@inputUserId

来自INV

我假设这条线:

EXEC @newOrdNo = GetLastVouchNumber @resultOrdNo

将第一个过程的结果存储到@newOrdNo 中,然后我可以使用这个@newOrdNo 将它插入到另一个表中。但是在我执行第二个存储过程之后,ORDNO 列不包含任何值...

需要建议。

【问题讨论】:

为什么需要使用SP call SP 【参考方案1】:

在调用GetLastVouchNumber 时使用OUTPUT 关键字并将@newOrdNo 作为输出参数传递。您的GetLastVouchNumber 过程返回带有输出参数的信息。

ALTER PROCEDURE [dbo].[MassAdjInsertIntoYTDTRNI]
    @inputPeriod nvarchar(255),
    @inputUserId nvarchar(255)
AS
BEGIN
    DECLARE @resultOrdNo nvarchar (255)
    DECLARE @newOrdNo nvarchar(255)

    -- Call your stored procedure
    EXEC GetLastVouchNumber @newOrdNo OUTPUT

    INSERT INTO YTDTRNI(TRCDE,PROD,WH,DESCR,UCOST,TCOST,DRAC,CRAC,REM,QTY,UM,ORDNO,TRDATE,SYSDATE,PERIOD,USERID)
    SELECT 'AJ',PROD,WH,DESCR,0,-TCOST,STKGL,COSGL,'MASS ADJUSTMENT',0,UM,@newOrdNo, GETDATE(),GETDATE(),@inputPeriod,@inputUserId

END

【讨论】:

【参考方案2】:

您似乎混淆了返回值输出变量。您的存储过程使用后者来返回您的值,并且没有显式返回任何内容(尽管令人困惑,因为您已将输出变量命名为 returnVal)。

调用时必须指定OUTPUT

 EXEC GetLastVouchNumber @resultOrdNo OUTPUT

【讨论】:

以上是关于存储过程中的存储过程 NVARCHAR 输出值的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 存储过程 带输出参数

存储过程转换失败

如何用存储过程填充表中的所有空值

存储过程中的事务

如何使用 Nvarchar(max) 参数创建 CLR 存储过程?

从存储过程中的参数表中提取参数?