如何仅对临时表中的现有列执行选择操作?

时间:2014-08-06 15:03:50

标签: sql sql-server select

为什么在检查临时表中的列存在后是否无法执行选择操作?

IF OBJECT_ID(''tempdb..#tempTable.Column'') IS NOT NULL
    SELECT Column from #tempTable
--Error: Invalid column name 'Column'.

由于SQL Server中的操作顺序,是否抛出此错误?如果是这样,有没有办法推迟评估选择,直到满足存在标准?

1 个答案:

答案 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提供 - 我注意到我已经投了赞成票。)