[英]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.