3

我创建了一个如下表:

create table #tab
(
  id int
)

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

我在同一个会话上试过:

select object_id( "#tab" ) 

select object_id( "tempdb..#tab" )

但两者都返回null

4

1 回答 1

3

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

  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
于 2012-11-28T23:47:49.720 回答