【发布时间】:2010-09-16 10:11:59
【问题描述】:
是否有任何方法可以确定是否在会话中创建了特定的临时表,而无需引用创建它的 tempdb 数据库?用户在登录时被分配到特定的 tempdb,所以我不知道他们将使用哪个 tempdb。
我不需要指定一个tempdb来从临时表中选择数据,所以我肯定可以看到该表是否存在?
【问题讨论】:
标签: tsql sybase temp-tables
是否有任何方法可以确定是否在会话中创建了特定的临时表,而无需引用创建它的 tempdb 数据库?用户在登录时被分配到特定的 tempdb,所以我不知道他们将使用哪个 tempdb。
我不需要指定一个tempdb来从临时表中选择数据,所以我肯定可以看到该表是否存在?
【问题讨论】:
标签: tsql sybase temp-tables
您可以使用 object_id 检查是否存在临时对象:
SELECT object_id('#tmpTable')
您可以根据需要指定要使用的 tempdb,但您不必这样做:
SELECT object_id('tempdb..#tmpTable')
值得注意的是,这也适用于全局临时表:
SELECT object_id('##tmpTable')
为了使脚本可以重新运行而不必在最后执行 DROP TABLE,我总是在创建临时表之前进行检查和删除。我经常在开发 SQL 代码时留下创建的表。
IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
id int,
col1 varchar(100)
)
【讨论】:
在我看来,您不应该在这里使用临时表......这些看起来更像是常规表(可能带有用户标识符)。这里的场景是什么?
请注意,以这种方式使用临时表可能会对优化器/查询缓存造成严重破坏 - 它必须进行大量重新编译,因为每次调用 #FOO 的含义都会发生很大变化。
【讨论】: