2012-11-28 33 views
3

我創建了一個表,如下得到臨時表的對象ID:如何使用OBJECT_ID函數

create table #tab 
(
    id int 
) 

現在,我想要得到的表的對象ID。

我試圖在同一會話:

select object_id("#tab") 

select object_id("tempdb..#tab") 

但都返回null

+1

'的object_id( 「tempdb中..#標籤」)'?適用於MS SQL Server。 –

+0

@MartinSmith謝謝,但它不適用於iq。 – Parado

回答

3

簡短的回答...在智商這是不可能的。長時間的回答...你有一些相當不錯的選擇,有些不是很好的選擇。

  1. 改寫舊WATCOM SQL的整個過程中,捕獲錯誤如果操作刪除表失敗...

  2. 使用永久表(沒有有效的智商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