如果视图中存在列,我可以以某种方式选择列,但如果列不存在则忽略该列吗?
SELECT
CASE
WHEN EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
THEN MyView.MyColumn
ELSE NULL
END AS [Sometimes]
FROM
MyView
现在,它返回“消息207无效列名称”错误。
也许可以忽略该错误的一些选项?
答案 0 :(得分:3)
您可以使用动态SQL :
来完成此操作declare @sql varchar(200)
IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
BEGIN
select @sql = "SELECT Column1m Column2, MyColum from MyView"
END
ELSE
BEGIN
select @sql = "SELECT Column1m Column2, null as MyColum from MyView"
END
-- executes dynamic sql
EXEC @sql
答案 1 :(得分:1)
不,这是不可能的。必须编译列访问,如果没有别的话,这会在抑制它的表达式被评估之前发生。您需要为此动态生成SQL。
答案 2 :(得分:1)
你能做的最好的事情是
if EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
Select MyView.MyColumn from MyView
else
Select NULL MyColumn