2016-03-03 117 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,謝謝你,它的工作原理! –