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