Sql 在存储过程中执行语句时,out参数始终返回0

Sql 在存储过程中执行语句时,out参数始终返回0,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我需要在表中插入一些值,为此我创建了一个存储过程。传递4个值。两个值可以直接插入表中,对于另外两个值,需要找到一个ID 我有三个存储过程。当我执行主存储过程时,我可以看到两个被调用的存储过程被执行并得到正确的值。但是,此值不会传递到参数中 参数@uid和@did都在表中重新运行了0(零) 我做错了什么 亲切问候, 克莱门斯林德斯 SP MES_D_GetUserID,传递一个名称,然后将一个ID作为字符串 SP MES_D_GetDOrderID,传递一个名称,得到一个整数ID 主存储过程: U

我需要在表中插入一些值,为此我创建了一个存储过程。传递4个值。两个值可以直接插入表中,对于另外两个值,需要找到一个ID

我有三个存储过程。当我执行主存储过程时,我可以看到两个被调用的存储过程被执行并得到正确的值。但是,此值不会传递到参数中

参数@uid和@did都在表中重新运行了0(零)

我做错了什么

亲切问候,

克莱门斯林德斯

SP MES_D_GetUserID,传递一个名称,然后将一个ID作为字符串 SP MES_D_GetDOrderID,传递一个名称,得到一个整数ID

主存储过程:

USE [AddOn_DEV_HE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MES_D_Consumed]
@WERKS nvarchar(4), @USERNAME nvarchar(50), @MACHID int, @DRINKORDER nvarchar(50)
WITH EXEC AS CALLER
AS
BEGIN
    SET NOCOUNT ON;
    Declare @uid AS varchar(10)
    Declare @did AS int
    Declare @OUTUID AS varchar(10)
    Declare @OUTDID AS int

    exec @uid = MES_D_GetUserID @USERNAME, @OUTUID  OUTPUT;
    exec @did = MES_D_GetDOrderID @DRINKORDER, @OUTDID OUTPUT;

    INSERT INTO Demo_D_Consumed (Werks, UserID, MachID, DrinkID, TimeDate) VALUES (@WERKS, @uid, @MACHID, @did, GETDATE());

END

and these are the two other stored procedures :
USE [AddOn_DEV_HE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MES_D_GetDOrderID]
@DRINK nvarchar(50), @OUTDID int OUTPUT
WITH EXEC AS CALLER
AS
BEGIN
    SET NOCOUNT ON;
    SELECT RecordNr FROM DEMO_D_ORDERS WHERE Drink = @DRINK
END



USE [AddOn_DEV_HE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MES_D_GetUserID]
@USERNAME nvarchar(50), @OUTUID nvarchar(50) OUTPUT
WITH EXEC AS CALLER
AS
BEGIN
    SET NOCOUNT ON;
    SELECT UserLan FROM sysUsernames WHERE UserName = @USERNAME

END
换成

ALTER PROCEDURE [dbo].[MES_D_GetDOrderID]
@DRINK nvarchar(50), @OUTDID int OUTPUT
WITH EXEC AS CALLER
AS
BEGIN
    SET NOCOUNT ON;
    SELECT @OUTDID = RecordNr FROM DEMO_D_ORDERS WHERE Drink = @DRINK
END

您的
@OUTDID
将具有返回值。与其他SP相同

exec MES_D_GetDOrderID @DRINKORDER, @OUTDID OUTPUT;