如果Exist语句运行时不应该 - MS SQL Server 2014错误

时间:2017-02-06 21:03:53

标签: sql sql-server tsql

在下面的语句中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

然而,当我运行它时,我收到此错误:

  

Msg 207,Level 16,State 1,Line 3
  列名称“Field1”无效。

这是一个错误还是我做错了什么?如果Field1存在,我需要查询表格。

请注意,database1存在且field1不存在。

3 个答案:

答案 0 :(得分:3)

您需要使用动态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');

答案 1 :(得分:0)

我相信你有一个错字。

你有:

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

因为我没有数据库和teh表这是我的结果:

enter image description here

答案 2 :(得分:0)

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