4

我有以下查询:

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

4

3 回答 3

9

试试这个:

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
于 2013-06-21T08:50:04.867 回答
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;
于 2017-09-14T14:23:18.003 回答
-2

使用临时数据库

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 
于 2017-01-24T06:42:24.003 回答