2014-11-17 55 views
0

我想根據if else條件在我的存儲過程中添加一些消息,我該怎麼做。問題是我有三個表隊,帳戶和用戶。如果沒有任何帳戶且用戶與該團隊有關,我只想在條件下刪除團隊表中的teamA。我有存儲過程工作正常,但我想檢查條件,並希望添加一些自定義消息使用if else。請在這裏幫助我的代碼。在存儲過程中添加自定義消息

Create PROCEDURE sp_DeleteTeam 

@pTeamId int 
AS 
BEGIN 

    SET NOCOUNT ON; 

    update t 
    set t.Deleted =1 
    from Team t 
    where t.TeamId = @pTeamId 
    And Not Exists (Select 1 from [User] where TeamId = @pTeamId) 

    And Not Exists (Select 1 from Account where TeamId = @pTeamId) 
END 
+0

請不要在存儲過程中使用'sp_'前綴命名其系統默認過程名稱前綴。 – Rajesh

+0

@Rajesh感謝你的信息。我沒有在我的查詢中使用這個前綴。爲了更好的理解我在這裏提到它。 – Felixerity

回答

2

不要爲用戶存儲過程使用前綴sp_,因爲它是爲系統過程保留的。

下面是一個使用RAISERROR返回消息的示例。此示例中的嚴重度爲11或更高將在應用程序中引發異常。 10或更低的嚴重程度將生成一條信息性消息。

CREATE PROCEDURE usp_DeleteTeam @pTeamId int 
AS 
    BEGIN 

     SET NOCOUNT ON; 
     DECLARE @Message varchar(2047); 

     UPDATE t 
     SET  t.Deleted = 1 
     FROM Team t 
     WHERE t.TeamId = @pTeamId 
       AND NOT EXISTS (SELECT 1 
           FROM [User] 
           WHERE TeamId = @pTeamId) 
       AND NOT EXISTS (SELECT 1 
           FROM Account 
           WHERE TeamId = @pTeamId); 

     IF @@ROWCOUNT = 0 
      BEGIN 
       IF NOT EXISTS (SELECT * 
           FROM Team 
           WHERE TeamId = @pTeamId) 
        BEGIN 
         SET @Message = 'does not exist in Team table'; 
        END; 
       IF EXISTS (SELECT * 
          FROM [User] 
          WHERE TeamId = @pTeamId) 
        BEGIN 
         SET @Message = COALESCE(@Message + ', ', '') 
          + 'already exists in User table'; 
        END; 
       IF EXISTS (SELECT * 
          FROM Account 
          WHERE TeamId = @pTeamId) 
        BEGIN 
         SET @Message = COALESCE(@Message + ', ', '') 
          + 'already exists in Account table'; 
        END; 
       SET @Message = 'Team %d: ' + @Message 
       RAISERROR(@Message, 11, 0, @pTeamId); 
      END; 
    END; 
+0

Guzman謝謝你這麼多先生 – Felixerity

+0

喜先生,我該如何設置像 t.Deleted = 1, t.LastUpdatedOn = GETDATE(), t.LastUpdatedBy = ???? 從T隊,我想lastUpdatedBy值柱中裝載了用戶ID是在用戶表 我有什麼嘗試到目前爲止 已刪除= 1, \t LastUpdatedOn = GETDATE(), \t LastUpdatedBy = 1 「我已經把這個值硬編碼了」「請幫忙 – Felixerity

+0

你提到你想從用戶表中獲取LastUpdatedBy值,但只有TeamId不會出現在UPDATE表中。我建議你用'CREATE TABLE'語句,樣本數據和預期結果發佈另一個問題。 –

0

據我瞭解,你只是想看看它是否成功執行。如果存儲過程被稱爲在某些Applciation,最後,給出一個SELECT語句作爲

SELECT 'Your message' AS Message 

然後在應用程序中的結果存儲在數據集和檢索信息,

如果你不使用它在任何應用程序,然後只需使用

print 'your message' 

,或者可以嘗試更加具體和明確一點闡述您的問題。

1

使用下面的SP來使用打印或選擇消息。

Create PROCEDURE sp_DeleteTeam 

@pTeamId int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF ((NOT EXISTS (SELECT TOP 1 FROM [User] WHERE TeamId = @pTeamId)) AND (Not EXISTS (SELECT TOP 1 FROM Account WHERE TeamId = @pTeamId))) 
    BEGIN 
    UPDATE T 
    SET T.Deleted = 1 
    FROM Team t 
    WHERE T.TeamId = @pTeamId 

    SELECT 'Not exist - Table updated' AS Message 
    --PRINT 'Not exist - Table updated' 
    END 
    ELSE 
    BEGIN 
    SELECT 'Already exist - Table not updated.' AS Message 
    --PRINT 'Already exist - Table not updated.' 
    END 
END 
+0

感謝您的回答。它幫助了很多。 – Felixerity

+0

嗨,先生,我怎麼能設置值像t.Deleted = 1,t.LastUpdatedOn = getDate(),t.LastUpdatedBy = ????從隊伍t,我想lastUpdatedBy列充滿UserId這是在用戶表中我已經嘗試它到目前爲止刪除= 1,LastUpdatedOn = GetDate(),LastUpdatedBy = 1「我把這個值硬編碼」「請幫助 – Felixerity

相關問題