为什么在检查临时表中的列存在后是否无法执行选择操作?
IF OBJECT_ID(''tempdb..#tempTable.Column'') IS NOT NULL
SELECT Column from #tempTable
--Error: Invalid column name 'Column'.
由于SQL Server中的操作顺序,是否抛出此错误?如果是这样,有没有办法推迟评估选择,直到满足存在标准?
答案 0 :(得分:0)
这是一个问题,因为代码首先编译然后执行。编译器检查所有列和表是否可用。
现在,"正常"解决这些问题的方法是使用动态SQL。类似的东西:
IF OBJECT_ID(''tempdb..#tempTable.Column'') IS NOT NULL
exec sp_executesql N'SELECT Column from #tempTable';
但是,这不符合你的情况。问题是在动态SQL的上下文中无法理解#temptable
。
IF OBJECT_ID('_tempTable.Column') IS NOT NULL
exec sp_executesql N'SELECT Column from _tempTable';
当我有"临时"你可能会猜到在非临时数据库中,我使用_
将它们与其他表区分开来。
编辑:
如果要确定列是否在临时表中,请使用如下逻辑:
select *
from tempdb.sys.columns
where object_id = object_id('tempdb..#mytemptable');
(由answer提供 - 我注意到我已经投了赞成票。)