简体   繁体   English

如果Exist语句在不应运行的情况下正在运行— MS SQL Server 2014错误

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM