[英]If Exist statement is running when it should not — MS SQL Server 2014 error
In the below statement Field1
does not exist. 在下面的语句中,
Field1
不存在。 IF EXIST
will return false and the select statement on line 3 should not run. 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
However, when I run this, I get this error: 但是,当我运行此命令时,出现以下错误:
Msg 207, Level 16, State 1, Line 3
消息207,第16级,州1,第3行
Invalid column name 'Field1'.无效的列名“ Field1”。
Is this a bug or am I doing something wrong? 这是一个错误还是我做错了什么? I need to query the table if
Field1
exists. 我需要查询表是否存在
Field1
。
Please note that database1 exists and field1 does not exist. 请注意,database1存在,而field1不存在。
You'll need to use dynamic SQL: 您需要使用动态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');
You had a typo I believe. 我相信你有错字。
you had: 你有过:
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
try this: 尝试这个:
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
as I dont have the database and teh table this is my results: 因为我没有数据库和表,这是我的结果:
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'))
Using INFORMATION_SCHEMA: ( MS Docs ) 使用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>)
Check it here: http://rextester.com/LVB42621 在此处检查: http : //rextester.com/LVB42621
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.