2012-04-20 14 views
5

He el siguiente procedimiento almacenado:IF/ELSE dependiendo resultado de procedimiento almacenado

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 

Ahora me gustaría crear otro SP con un código de esa manera:

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

¿Cuál es la sintaxis correcta para hacerlo?

+1

¿Qué hay de malo con solo hacerlo en línea? como: 'IF EXISTS (SELECT 1 FROM Administrator WHERE Administrator.SID = @SID AND Administrator.Name = @AdminName) BEGIN PRINT 'exists' END ELSE BEGIN PRINT 'NO EXISTE' END ', es una consulta tan trivial, solo inclúyelo donde lo necesite. –

Respuesta

11

No debe utilizar un procedimiento almacenado para esto y utilizar una función en su lugar para comprobar si existe el administrador.

Luego, en el nuevo procedimiento almacenado llama a la función 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

Gracias por su respuesta Darren. El código no funciona. Msg 156, nivel 15, estado 1, procedimiento CheckAdminExists, línea 8. En línea: DECLARE @RetVal INT – user1011394

+0

@ user1011394 reeditado: la función funciona. –

+4

COUNT puede ser mucho más caro que un EXISTE –

3

hecho, el uso FUNCTION.

Pero si necesita devolver más de 1, use los parámetros OUTPUT.

Cuestiones relacionadas