Tsql 在多tempdb环境中测试是否存在临时表?

Tsql 在多tempdb环境中测试是否存在临时表?,tsql,sybase,temp-tables,Tsql,Sybase,Temp Tables,是否有任何方法可以确定是否在会话中创建了特定的临时表,而无需引用创建该表的tempdb数据库?用户登录时被分配到特定的tempdb,所以我不知道他们将使用哪个tempdb 我不需要指定tempdb来从temp表中选择数据,因此我肯定可以看到该表是否存在?在我看来,您不应该在这里使用临时表。。。这些看起来更像是带有用户标识符的常规表。这里的情况是什么 请注意,以这种方式使用临时表可能会对Optimizer/query缓存造成严重破坏-它必须进行大量重新编译,因为每次调用FOO的含义都会发生很大变化

是否有任何方法可以确定是否在会话中创建了特定的临时表,而无需引用创建该表的tempdb数据库?用户登录时被分配到特定的tempdb,所以我不知道他们将使用哪个tempdb


我不需要指定tempdb来从temp表中选择数据,因此我肯定可以看到该表是否存在?

在我看来,您不应该在这里使用临时表。。。这些看起来更像是带有用户标识符的常规表。这里的情况是什么


请注意,以这种方式使用临时表可能会对Optimizer/query缓存造成严重破坏-它必须进行大量重新编译,因为每次调用FOO的含义都会发生很大变化。

在我看来,您不应该在这里使用临时表。。。这些看起来更像是带有用户标识符的常规表。这里的情况是什么


请注意,以这种方式使用临时表可能会对Optimizer/query缓存造成严重破坏-它必须进行大量重新编译,因为每次调用FOO的含义都会发生很大变化。

您可以使用对象id检查是否存在临时对象:

SELECT object_id('#tmpTable')
如果需要,可以指定要使用的tempdb,但不必:

SELECT object_id('tempdb..#tmpTable')
值得注意的是,这也适用于全局临时表:

SELECT object_id('##tmpTable')
为了使脚本可以重新运行,而不必在最后创建一个删除表,我总是在创建临时表之前进行检查和删除。我经常在开发SQL代码时留下创建的表

IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
    id int,
    col1 varchar(100)
)

您可以使用对象id检查是否存在临时对象:

SELECT object_id('#tmpTable')
如果需要,可以指定要使用的tempdb,但不必:

SELECT object_id('tempdb..#tmpTable')
值得注意的是,这也适用于全局临时表:

SELECT object_id('##tmpTable')
为了使脚本可以重新运行,而不必在最后创建一个删除表,我总是在创建临时表之前进行检查和删除。我经常在开发SQL代码时留下创建的表

IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
CREATE TABLE #tmpTable (
    id int,
    col1 varchar(100)
)

这是一个复杂的场景,需要解释的是所有遗留应用和疯狂的需求,包括不使用常规表。基本上,我需要一个应用程序通过executeimmediate创建临时表,然后使用存储过程填充它。然后从表中读取应用程序。在这种情况下,我能建议的最好办法就是试着从表中选择,看看它是否会呕吐!抱歉…谢谢,这就是我目前正在做的,但感觉有点不雅。这是一个复杂的场景,需要解释,这都是遗留应用和疯狂的需求,包括不使用常规表。基本上,我需要一个应用程序通过executeimmediate创建临时表,然后使用存储过程填充它。然后从表中读取应用程序。在这种情况下,我能建议的最好办法就是试着从表中选择,看看它是否会呕吐!对不起…谢谢,这就是我现在正在做的,但是感觉有点不雅。