我有一个存储过程,该存储过程返回这样写的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
FROM INV
我以为这行:
EXEC @newOrdNo = GetLastVouchNumber @resultOrdNo
会将第一个过程的结果存储到@newOrdNo中,然后再使用此@newOrdNo将其插入到另一个表中。但是在执行第二个存储过程之后,ORDNO列不包含任何值...
需要建议。
答案 0 :(得分:1)
调用OUTPUT
并使用GetLastVouchNumber
作为输出参数时,请使用@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
答案 1 :(得分:1)
您似乎混淆了返回值和输出变量。您存储的proc使用后者来返回您的值,并且不显式返回任何内容(尽管令人困惑,因为您已将输出变量命名为returnVal
)。
调用它时,必须指定OUTPUT
EXEC GetLastVouchNumber @resultOrdNo OUTPUT