在下面的语句中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不存在。
答案 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表这是我的结果:
答案 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>)