3

以下のような表を作成しました。

create table #tab
(
  id int
)

ここで、テーブルのオブジェクト ID を取得したいと思います。

私は同じセッションで試しました:

select object_id( "#tab" ) 

select object_id( "tempdb..#tab" )

しかし、どちらも戻りnullます。

4

1 に答える 1

3

短い答え... IQではこれは不可能です。長い答え...かなり良い選択肢がいくつかあり、あまり良くない選択肢もあります。

  1. 古いwatcom SQLで手順全体を書き直し、テーブルを削除する操作が失敗した場合にエラーをトラップします...

  2. 恒久的なテーブルを使用します(私が知る限り、IQの2つの間に実質的な違いはありません)

  3. ファンキーになって...そして奇妙なIQの振る舞いを使用してください!トランザクションの外部で一時テーブルを作成する場合は、@@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 に答える