2012-04-20 57 views
5

的結果,我下面的存儲過程:的if/else取決於存儲過程

ALTER PROCEDURE [dbo].[CheckAdminExists] 
    @SID NVARCHAR(50), 
    @AdminName NVARCHAR(MAX) 
AS 
    SELECT 
     Administrator.ID 
    FROM 
     Administrator 
    WHERE 
     Administrator.SID = @SID 
     AND Administrator.Name = @AdminName 
GO 

現在我想創建另一個SP有了這樣的代碼:

IF NOT NULL (EXECUTE CheckAdminExists 'S-1','Admin') 
--do something 
ELSE 
--do something else 

有什麼正確的語法來做到這一點?

+1

剛做內聯時出了什麼問題?例如:'如果EXISTS(SELECT 1 FROM Administrator WHERE Administrator.SID = @SID AND Administrator.Name = @AdminName)BEGIN PRINT'它存在'END ELSE BEGIN PRINT'它不存在'END'這是一個很普通的查詢,只需將它包括在你需要的地方。 – 2012-04-20 15:02:16

回答

11

您不應該爲此使用存儲過程,而是使用函數來檢查Admin是否存在。

然後在你的新的存儲過程調用CheckAdminExists功能:

CREATE FUNCTION [dbo].[CheckAdminExists] (@SID NVARCHAR(50), @AdminName NVARCHAR(MAX)) 
RETURNS BIT 
AS 
BEGIN 
DECLARE @RetVal INT 

SELECT @RetVal = COUNT(Administrator.ID) 
FROM 
    Administrator 
WHERE 
    Administrator.SID = @SID 
    AND Administrator.Name = @AdminName 

IF @RetVal > 0 
BEGIN 
    RETURN 1 
END 
    RETURN 0 
END 

Then in your stored procedure call the function: 

DECLARE @AdminExists BIT 
SELECT @AdminExists = [dbo].[CheckAdminExists] 

IF @AdminExists 
BEGIN 
    -- your code 
END 
ELSE 
BEGIN 
    -- your code 
END 
+0

謝謝你的回覆Darren。該代碼不起作用。 Msg 156,Level 15,State 1,Procedure CheckAdminExists,Line 8. In Line:DECLARE @RetVal INT – user1011394 2012-04-20 14:56:23

+0

@ user1011394重新編輯 - 該函數有效。 – 2012-04-20 15:01:20

+4

COUNT可能比EXISTS更昂貴 – 2012-04-20 15:07:18

3

事實上,使用FUNCTION

但是,如果您需要返回超過1,請使用OUTPUT參數。