簡體   English   中英

如果Exist語句在不應運行的情況下正在運行— MS SQL Server 2014錯誤

[英]If Exist statement is running when it should not — MS SQL Server 2014 error

在下面的語句中, Field1不存在。 IF EXIST將返回false,則第3行的select語句不應運行。

IF EXISTS (SELECT * 
           FROM  Database1.sys.columns 
           WHERE NAME = 'Field1' 
             AND OBJECT_ID = OBJECT_ID('Database1.dbo.Table1')) 
    SELECT D.Field1 
    FROM Database1.dbo.Table1 D

但是,當我運行此命令時,出現以下錯誤:

消息207,第16級,州1,第3行
無效的列名“ Field1”。

這是一個錯誤還是我做錯了什么? 我需要查詢表是否存在Field1

請注意,database1存在,而field1不存在。

您需要使用動態SQL:

IF EXISTS (SELECT * FROM  Database1.sys.columns WHERE NAME = 'Field1' 
AND OBJECT_ID = OBJECT_ID('Database1.dbo.Table1')) 
    EXEC('SELECT D.Field1 FROM Database1.dbo.Table1 D');

我相信你有錯字。

你有過:

IF EXISTS (SELECT * FROM  Database1.sys.columns WHERE NAME = 'Field1' 
AND OBJECT_ID = OBJECT_ID('Database1.dbo.Table1')) 
    SELECT D.Field1 
    FROM Database1.dbo.Field1 D

嘗試這個:

IF EXISTS (SELECT * FROM  sys.columns WHERE NAME = 'Field1' 
AND OBJECT_ID = OBJECT_ID('Database1.dbo.Table1')) 
    SELECT D.Field1 
    FROM Database1.dbo.Table1 D

因為我沒有數據庫和表,這是我的結果:

在此處輸入圖片說明

SELECT D.Field1 
FROM Database1.dbo.Field1 D
WHERE EXISTS (SELECT 1 FROM  sys.columns WHERE NAME = 'Field1' 
              AND OBJECT_ID = OBJECT_ID('Database1.dbo.Table1'))

使用INFORMATION_SCHEMA :( MS Docs

SELECT D.<Field Name> 
FROM <Catalog>.<Schema>.<Table name> D
WHERE EXISTS (SELECT 1 FROM  INFORMATION_SCHEMA.COLUMNS 
              WHERE TABLE_CATALOG = <Catalog>
                    AND TABLE_SCHEMA = <Schema>
                    AND TABLE_NAME = <Table name>
                    AND COLUMN_NAME = <Column name>)

在此處檢查: http : //rextester.com/LVB42621

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM