检查临时表是否存在的方法

时间:2013-06-21 08:36:51

标签: sybase sybase-ase

我有以下查询:

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中创建的。
所以我的问题是有一种方法可以检查临时表是否存在或不是吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

答案 2 :(得分:-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