【问题标题】:How to get an object ID from temporary table using object_id function如何使用 object_id 函数从临时表中获取对象 ID
【发布时间】:2026-02-13 10:20:02
【问题描述】:

我创建了一个如下表:

create table #tab
(
  id int
)

现在,我想获取表的对象 ID。

我在同一个会话中尝试过:

select object_id( "#tab" ) 

select object_id( "tempdb..#tab" )

但两者都返回null

【问题讨论】:

  • object_id( "tempdb..#tab" )?在 MS SQL Server 中工作。
  • @MartinSmith 谢谢,但它不适用于 iq。

标签: sql temp-tables sap-iq


【解决方案1】:

简短的回答...在智商上这是不可能的。长答案...您有一些相当不错的选择,也有一些不太好的选择。

  1. 用旧的watcom SQL重写整个过程,如果删除表的操作失败则捕获错误...

  2. 使用永久表(据我所知 IQ 中的 2 没有有效区别)

  3. 变得时髦...并使用奇怪的智商行为!如果您在事务之外创建临时表,请检查@@trancount ...您将得到 0 如您所愿。如果您然后打开一个事务...并检查@@trancount,您将得到 2。所以...考虑成功创建临时表 :)

  4. 假设它在您的连接中不存在 :)

Sybase ASA SQL 代码列表: http://manuals.sybase.com/onlinebooks/group-sas/awg0800e/dberen8/@Generic__BookTextView/334;pt=334#X

#1 的示例:

DROP PROCEDURE foo;
go
create procedure foo()
begin
  DECLARE DROP_TABLE_FAILED EXCEPTION FOR SQLSTATE '42W33';

  BEGIN
    DROP TABLE T1;
    EXCEPTION 
      WHEN DROP_TABLE_FAILED 
      THEN 
      WHEN OTHERS THEN RESIGNAL;

  END;

    CREATE LOCAL TEMPORARY TABLE t1 (c1 int) 
    on commit preserve rows;

    insert into t1 select 1;

    select * from t1;

END;
go
exec foo
go
exec foo
go
drop table t1;
go

【讨论】: