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