SQL Server IF EXISTS THEN 1 ELSE 2

Mic*_*ael 32 sql sql-server stored-procedures if-statement sql-server-2012

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

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2
Run Code Online (Sandbox Code Playgroud)

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

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

这是否可以通过IF EXIST实现?

问候,

迈克尔

Ric*_*ner 69

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

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN
   SELECT 1 
END
ELSE
BEGIN
    SELECT 2
END
Run Code Online (Sandbox Code Playgroud)

你并不严格需要这些BEGIN..END陈述,但最好从一开始就养成这种习惯.


Lak*_*ran 8

始终保持最佳实践TOP 1 1

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

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

IF EXISTS (SELECT TOP 1 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN
   SELECT 1 
END
ELSE
BEGIN
    SELECT 2
END
Run Code Online (Sandbox Code Playgroud)

  • 这绝对没有必要 - 请参阅[这个问题](/sf/ask/3573477841/) (6认同)
  • @BillTür 我仍然相信这是有效的查询。一切都是基于 WHERE 条件。如果您的情况与一条记录完全匹配,那么就没有问题。假设您的条件匹配更多的记录,那么它将花费更多的费用。当我选择 1 时,计算标量成本为:16%。当我使用 SELECT TOP 1 1 时,计算标量成本为:0% 因此,它根据匹配的记录数而有所不同 (3认同)

Ant*_*tDC 7

使用IIF怎么样?

SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2)
Run Code Online (Sandbox Code Playgroud)

此外,如果使用EXISTS来检查行的存在,请不要使用*,只需使用1.我相信它可以降低成本.

  • 使用"SELECT*"vs"SELECT 1"或"SELECT 0"与EXISTS在SQL Server中没有成本差异.更多的是偏好问题. (4认同)

Zei*_*ina 6

您可以定义一个变量@Result来填充您的数据

DECLARE @Result AS INT

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
SET @Result = 1 
else
SET @Result = 2
Run Code Online (Sandbox Code Playgroud)


Pரத*_*ீப் 6

在没有SELECT你的SQL 中,你不能产生任何结果。IF-ELSE我更喜欢为此使用CASE语句而不是块

SELECT CASE
         WHEN EXISTS (SELECT 1
                      FROM   tblGLUserAccess
                      WHERE  GLUserName = 'xxxxxxxx') THEN 1
         ELSE 2
       END 
Run Code Online (Sandbox Code Playgroud)