存储过程中的存储过程 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 输出值的主要内容,如果未能解决你的问题,请参考以下文章