2010-04-22 48 views
0

我有一個存儲過程(SS2008),它需要一對intid,並且需要在添加記錄之前查看它們是否存在於表中。我有一個int輸出參數,我想返回並設置它的值基於什麼occrured。到目前爲止,我有這個,但它總是返回1.有人能指出我正確的方向嗎?SQL IF ELSE輸出參數存儲過程幫助

BEGIN TRY 

IF EXISTS 
(
    SELECT * FROM tbMap WHERE (cId= @CId) 
) 
    SET @result = -1; -- This C User is already mapped 

ELSE IF EXISTS 
(
    SELECT * FROM tbMap WHERE (dId = @DId) 

) 

    SET @result = -2; -- This D User is already mapped 

ELSE 
    INSERT INTO tbMap (
     Login 
     , Email 
     , UserName 
     , CId 
     , DId) 
    SELECT 
      @UserName 
      , usr.EmailAddress 
      , usr.UserName 
      , @CId 
      , @DId 
     FROM tbUser usr WHERE usr.iUserID = @DId 

    SET @result = 1; 
RETURN 

結束Try

我缺少什麼?感謝您的任何提示。

歡呼聲中,在聖地亞哥

回答

3

將最後一個ELSE的多個語句放在BEGIN/END塊中,否則最後一個SET總是被執行。

ELSE 
BEGIN 
    INSERT INTO tbMap (
     Login 
     , Email 
     , UserName 
     , CId 
     , DId) 
    SELECT 
      @UserName 
      , usr.EmailAddress 
      , usr.UserName 
      , @CId 
      , @DId 
     FROM tbUser usr WHERE usr.iUserID = @DId 

    SET @result = 1; 
    RETURN 
END 
END TRY 
+0

工作完美。謝謝! – Hcabnettek 2010-04-22 15:51:10

0

〜CK您是否嘗試過使用SELECT @result代替SET?此外,我假設調用代碼具有@result參數標記爲輸出?