2013-06-21 2 views
3

У меня есть этот следующий запрос:способ проверить, если временная таблица существует или нет

IF NOT EXISTS (SELECT 1 
       FROM sysobjects 
       WHERE id = Object_id('tempdb..TEMP_THETH_DETAILS')) 
    EXECUTE (
'CREATE TABLE tempdb..TEMP_THETH_DETAILS(THETH_ID NUMERIC(5) NOT NULL, LANGUAGE VARCHAR(3) DEFAULT ''EN'' NOT NULL)' 
) 

GO 

Проблема проверка, она кажется Tempdb не принимает на рассмотрение, если не существует, возможно, из-за стола был создан в tempdb.
Итак, мой вопрос заключается в том, как я могу проверить, существует ли временная таблица или нет?

ответ

8

Попробуйте это:

IF object_id('tempdb..TEMP_THETH_DETAILS') is null 
begin 
    EXECUTE 
    (
     'CREATE TABLE tempdb..TEMP_THETH_DETAILS 
     (THETH_ID NUMERIC(5) NOT NULL, 
      LANGUAGE VARCHAR(3) DEFAULT ''EN'' NOT NULL 
     )' 
    ) 
end 
go 
+0

parado Я не хочу, чтобы создать его как #temp_ .. потому что я хочу, чтобы таблица будет insrted в базе данных Sybase MDB, создавая, как #tem будут удалены, когда концы sesions который я этого не хочу. это похоже на глобальную временную таблицу оракула – Moudiz

+0

@Moudiz ОК, я понимаю. Я отредактировал ответ. – Parado

+0

superb it wroks спасибо мужчина – Moudiz

-2

использование Tempdb

GO 

IF NOT EXISTS (SELECT 1 
      FROM sysobjects 
      WHERE id = Object_id('tempdb..TEMP_THETH_DETAILS')) 
EXECUTE (
    'CREATE TABLE tempdb..TEMP_THETH_DETAILS(THETH_ID NUMERIC(5) NOT NULL, 
    LANGUAGE VARCHAR(3) DEFAULT ''EN'' NOT NULL)' 
) 

GO 
+1

извините, в чем разница? – Moudiz

0

Вы можете поймать исключение при проверке таблицы существования и выполнения кода, если исключение было перехвачено.

В Sybase:

begin 

    declare SQLE_TABLE_NOT_FOUND EXCEPTION FOR SQLSTATE '42W33'; 

    ... 

    if exists(select 'x 
       from #tmpTable) then 

    -- TODO 

    endif; 

    -- at the end of the function if table not exists, 

    -- thrown exception is catched here 

    exception when SQLE_TABLE_NOT_FOUND then 

    -- TODO 

end; 
+0

Ухм его старый вопрос, однако я проверю, что ты ответишь, может быть, что-то новое для меня – Moudiz