簡體   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