【问题标题】:A way to check if the temporary table exists or not一种检查临时表是否存在的方法
【发布时间】:2013-06-18 07:52:32
【问题描述】:

我有以下查询:

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

【问题讨论】:

    标签: sybase sap-ase


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • parado 我不想将其创建为 #temp_ .. 因为我希望将表插入 MDB sybase 数据库中,创建为 #tem 将在会话结束时被删除,我不希望那样.在 oracle 全局临时表中类似
    • 很高兴云能帮到你!
    【解决方案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 
    

    【讨论】:

    • 抱歉有什么区别?
    【解决方案3】:

    您可以在检查表是否存在时捕获异常,并在异常被拦截时执行代码。

    在 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;
    

    【讨论】:

    • 嗯,这是一个老问题,但我会检查你是否回答可能对我来说有些新问题
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 2014-12-19
    • 2011-09-25
    • 2010-10-26
    • 1970-01-01
    • 2010-10-14
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多