2012-04-20 6 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

Что не так, только если это делается inline? например: 'IF EXISTS (SELECT 1 FROM Administrator WHERE Administrator.SID = @SID AND Administrator.Name = @AdminName) BEGIN PRINT 'он существует' END ELSE BEGIN PRINT 'он НЕ существует' END', который является таким тривиальным запросом, просто включите его там, где он вам нужен. –

ответ

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

Спасибо за ваш ответ Даррен. Код не работает. Msg 156, уровень 15, состояние 1, процедура CheckAdminExists, строка 8. В строке: DECLARE @RetVal INT – user1011394

+0

@ user1011394 переиздан - функция работает. –

+4

COUNT может быть дороже, чем EXISTS –

3

Действительно, используйте FUNCTION.

Но если вам нужно вернуть более 1, используйте параметры OUTPUT.

Смежные вопросы