以下のような表を作成しました。
create table #tab
(
id int
)
ここで、テーブルのオブジェクト ID を取得したいと思います。
私は同じセッションで試しました:
select object_id( "#tab" )
と
select object_id( "tempdb..#tab" )
しかし、どちらも戻りnull
ます。
以下のような表を作成しました。
create table #tab
(
id int
)
ここで、テーブルのオブジェクト ID を取得したいと思います。
私は同じセッションで試しました:
select object_id( "#tab" )
と
select object_id( "tempdb..#tab" )
しかし、どちらも戻りnull
ます。
短い答え... IQではこれは不可能です。長い答え...かなり良い選択肢がいくつかあり、あまり良くない選択肢もあります。
古いwatcom SQLで手順全体を書き直し、テーブルを削除する操作が失敗した場合にエラーをトラップします...
恒久的なテーブルを使用します(私が知る限り、IQの2つの間に実質的な違いはありません)
ファンキーになって...そして奇妙なIQの振る舞いを使用してください!トランザクションの外部で一時テーブルを作成する場合は、@@trancount を確認してください...予想どおり 0 になります。その後、トランザクションを開いて @@trancount を確認すると、2 が返されます。したがって、一時テーブルの作成が成功したと考えてください :)
接続に存在しないと仮定してください:)
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