繁体   English   中英

CASE WHEN SQL 查询在 else 中执行条件,即使第一个条件为真

[英]CASE WHEN SQL Query executes condition in else even if first condition is true

我正在尝试检查表中是否存在数据。 首先我检查表是否存在然后我使用 SELECT 语句来检查表是否为空

DECLARE @dataExists BIT = 0

SELECT 
             @dataExists = CASE 
                               WHEN OBJECT_ID('TableName') IS NULL 
                                  THEN 0 
                                  ELSE CASE 
                                          WHEN EXISTS(SELECT 1 FROM TableName) 
                                             THEN 1 
                                             ELSE 0 
                                       END 
                            END

SELECT @dataExists

如果OBJECT_ID('TableName')返回 NULL,我有这个不应该执行SELECT 1 FROM TableName的查询但是这个查询继续执行

SELECT 1 FROM TableName 

这当然会引发错误

无效的 Object 名称 TableName

尝试以下操作:

DECLARE @dataExists BIT = 0

IF OBJECT_ID('TableName') IS NOT NULL
BEGIN
    SET @dataExists = (SELECT TOP 1 1 FROM TableName)
END

SELECT @dataExists

您得到的错误是编译错误。 因为它是一个单一的声明。 SQL 服务器需要建立一个执行计划,如果表不存在则不能这样做。

通过添加IF ,如果不满足条件,则不需要“编译”该语句。

带动态 SQL:

DECLARE @TableName SysName = 'TableName'
DECLARE @Sql NVARCHAR(MAX) = '
DECLARE @dataExists BIT = 0

IF OBJECT_ID('''+@TableName+''') IS NOT NULL
BEGIN
    SET @dataExists = (SELECT TOP 1 1 FROM '+QUOTENAME(@TableName)+')
END

SELECT @dataExists
'

EXEC (@Sql)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM