如何使用object_id函数从临时表中获取对象ID

时间:2012-11-28 14:47:35

标签: sql temp-tables sybase-iq

我创建了一个表格如下:

create table #tab
(
  id int
)

现在,我想得到表的对象ID。

我尝试了同一个会话:

select object_id( "#tab" ) 

select object_id( "tempdb..#tab" )

但两者都返回null

1 个答案:

答案 0 :(得分:3)

简短回答......关于智商,这是不可能的。答案很长......你有一些相当不错的选择和一些不那么好的选择。

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

  2. 使用永久表(据我所知,智商中2没有效果差异)

  3. 获得时髦......并使用奇怪的智商行为!如果在事务外部创建临时表,则检查@@ trancount ...您将得到0,如预期的那样。如果你然后打开一个交易...并检查@@ trancount你会得到2.所以...考虑一个成功的临时表创建:)

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

  5. 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