IF / ELSE取决于存储过程的结果

时间:2012-04-20 14:30:37

标签: sql sql-server database tsql stored-procedures

我有以下存储过程:

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

这样做的正确语法是什么?

2 个答案:

答案 0 :(得分:11)

您不应该为此使用存储过程,而是使用函数来检查管理员是否存在。

然后在新的存储过程中调用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

答案 1 :(得分:3)

确实,请使用FUNCTION

但是如果您需要返回超过1个,请使用OUTPUT个参数。