SQL Server IF EXISTS THEN 1 ELSE 2

时间:2016-12-07 10:42:48

标签: sql sql-server if-statement stored-procedures sql-server-2012

使用Sql Server 2012.我有一个存储过程,其中一部分检查用户名是否在表中。如果是,则返回1,如果不是,则返回2.这是我的代码:

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2

但是,我一直收到以下错误:

  

' 1'附近的语法不正确。

甚至可以使用IF EXIST吗?

此致

迈克尔

6 个答案:

答案 0 :(得分:53)

如果你想这样做,那么这就是你所遵循的语法;

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN
   SELECT 1 
END
ELSE
BEGIN
    SELECT 2
END

您并不严格需要BEGIN..END语句,但最好从一开始就养成这种习惯。

答案 1 :(得分:7)

如何使用IIF?

SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)

另外,如果使用EXISTS检查行是否存在,请不要使用*,只需使用1.我相信它的成本最低。

答案 2 :(得分:4)

在没有SELECT的SQL中,您无法获得任何结果。我更喜欢使用IF-ELSE语句代替CASE阻止

SELECT CASE
         WHEN EXISTS (SELECT 1
                      FROM   tblGLUserAccess
                      WHERE  GLUserName = 'xxxxxxxx') THEN 1
         ELSE 2
       END 

答案 3 :(得分:3)

您需要什么输出,printIF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2 或..等等。

所以请使用以下代码:

<tr>

答案 4 :(得分:2)

您可以定义变量@Result以填充其中的数据

DECLARE @Result AS INT

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
SET @Result = 1 
else
SET @Result = 2

答案 5 :(得分:1)

最佳做法是始终保持TOP 1 1

如果我使用SELECT 1->如果条件匹配多个记录怎么办,那么您的查询将获取所有列记录并返回1。

如果我使用SELECT TOP 1 1->如果条件也匹配多个记录怎么办,它将只获取任何行(带有自1值列)的存在并返回1。

IF EXISTS (SELECT TOP 1 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN
   SELECT 1 
END
ELSE
BEGIN
    SELECT 2
END