2016-03-03 112 views
0

我需要向表中插入一些值,并执行此操作我创建了一个存储过程。通过4个值。并且可以将两个值直接插入表中,另外两个值需要找到ID。在存储过程中执行语句,out参数总是返回0

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

@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 

回答

0

更改它们是

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 

而且

exec MES_D_GetDOrderID @DRINKORDER, @OUTDID OUTPUT; 

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

+0

嗨Artm,谢谢你,它的工作原理! –