2013-03-15 121 views
4

我想在SQL中的单个IF语句中添加多个条件。单个IF语句中的多个条件

我不擅长SQL &所提到的一些例子,在IF中都只显示一个条件。

这是我的程序。

CREATE PROCEDURE [dbo].[AddApplicationUser]  
( 
@TenantId BIGINT, 
@UserType TINYINT, 
@UserName NVARCHAR(100), 
@Password NVARCHAR(100) 
) 

AS  

BEGIN 

IF ((@TenantId IS NULL) AND (@UserType=0 OR @UserType=1)) 
    RAISERROR('The value for @TenantID should not be null', 15, 1) -- with log 

这是在SQL中用于IF中的多重编辑的正确语法吗?

+3

它是有效的,但你会立刻知道,如果你只是尝试了简化的条件? – 2013-03-15 10:32:21

+0

我是一名Oracle人员,但这也应该适用于SQL Server,我使用CASE,它的工作原理与IF语句一样。 http://msdn.microsoft.com/en-us/library/ms181765.aspx – blamonet 2013-03-15 10:32:56

+0

@LievenKeersmaekers我接受我的错误。我正在改变一个大的程序,并且我担心在知道IF语法的情况下做这种改变。我搜索了一些例子,但没有多大帮助。非常感谢 – Billa 2013-03-15 10:42:16

回答

-1

是的,IF后面必须有boolean expresion。这里你有一个直接link。我希望它有帮助。 GL!

+0

您的直接链接还表示只有一个条件示例IF cost <= compareprice。我需要去嵌套循环吗? – Billa 2013-03-15 10:33:30

+0

例如(成本<=比较价格和成本<= 2)也是有效的布尔表达式。 – www 2013-03-15 10:35:51

+0

@BadDeveloper试试这个http://www.sqlfiddle.com/#!6/d41d8/3169/0 – www 2013-03-15 10:40:00

3

是的,这是有效的语法,但它可能不会做你想做的。

在您的RAISERROR之后执行会继续,除非您添加RETURN。所以你需要添加一个包含BEGIN ... END的块来保存这两条语句。

另外我不确定为什么你的严重程度为15.那usually indicates a syntax error

最后我想用IN

CREATE PROCEDURE [dbo].[AddApplicationUser] (@TenantId BIGINT, 
              @UserType TINYINT, 
              @UserName NVARCHAR(100), 
              @Password NVARCHAR(100)) 
AS 
    BEGIN 
     IF (@TenantId IS NULL 
      AND @UserType IN (0, 1)) 
     BEGIN 
      RAISERROR('The value for @TenantID should not be null',15,1); 

      RETURN; 
     END 
    END