Check if a temporary table exists and delete if it exists before creating a temporary table

前端 未结 15 600
忘掉有多难
忘掉有多难 2020-11-29 14:13

I am using the following code to check if the temporary table exists and drop the table if it exists before creating again. It works fine as long as I don\'t change the colu

相关标签:
15条回答
  • 2020-11-29 14:46

    Just a little comment from my side since the OBJECT_ID doesn't work for me. It always returns that

    `#tempTable doesn't exist

    ..even though it does exist. I just found it's stored with different name (postfixed by _ underscores) like so :

    #tempTable________

    This works well for me:

    IF EXISTS(SELECT [name] FROM tempdb.sys.tables WHERE [name] like '#tempTable%') BEGIN
       DROP TABLE #tempTable;
    END;
    
    0 讨论(0)
  • 2020-11-29 14:52

    I recently saw a DBA do something similar to this:

    begin try
        drop table #temp
    end try
    
    begin catch 
        print 'table does not exist'
    end catch 
    
    create table #temp(a int, b int)
    
    0 讨论(0)
  • 2020-11-29 14:54

    My code uses a Source table that changes, and a Destination table that must match those changes.

    -- 
    -- Sample SQL to update only rows in a "Destination" Table
    --  based on only rows that have changed in a "Source" table
    --
    
    
    --
    -- Drop and Create a Temp Table to use as the "Source" Table
    --
    IF OBJECT_ID('tempdb..#tSource') IS NOT NULL drop table #tSource
    create table #tSource (Col1 int, Col2 int, Col3 int, Col4 int)
    
    --
    -- Insert some values into the source
    --
    Insert #tSource (Col1, Col2, Col3, Col4) Values(1,1,1,1)
    Insert #tSource (Col1, Col2, Col3, Col4) Values(2,1,1,2)
    Insert #tSource (Col1, Col2, Col3, Col4) Values(3,1,1,3)
    Insert #tSource (Col1, Col2, Col3, Col4) Values(4,1,1,4)
    Insert #tSource (Col1, Col2, Col3, Col4) Values(5,1,1,5)
    Insert #tSource (Col1, Col2, Col3, Col4) Values(6,1,1,6)
    
    --
    -- Drop and Create a Temp Table to use as the "Destination" Table
    --
    IF OBJECT_ID('tempdb..#tDest') IS NOT NULL drop Table #tDest
    create table #tDest (Col1 int, Col2 int, Col3 int, Col4 int)
    
    --
    -- Add all Rows from the Source to the Destination
    --
    Insert #tDest
    Select Col1, Col2, Col3, Col4 from #tSource
    
    
    --
    -- Look at both tables to see that they are the same
    --
    select *
    from #tSource
    Select *
    from #tDest
    
    --
    -- Make some changes to the Source
    --
    update #tSource
        Set Col3=19
        Where Col1=1
    update #tSource
        Set Col3=29
        Where Col1=2
    update #tSource
        Set Col2=38
        Where Col1=3
    update #tSource
        Set Col2=48
        Where Col1=4
    
    --
    -- Look at the Differences
    -- Note: Only 4 rows are different. 2 Rows have remained the same.
    --
    Select Col1, Col2, Col3, Col4
    from #tSource
    except
    Select Col1, Col2, Col3, Col4
    from #tDest
    
    --
    -- Update only the rows that have changed
    -- Note: I am using Col1 like an ID column
    --
    Update #tDest
        Set Col2=S.Col2,
            Col3=S.Col3,
            Col4=S.Col4
    From    (   Select Col1, Col2, Col3, Col4
                from #tSource
                except
                Select Col1, Col2, Col3, Col4
                from #tDest
            ) S
    Where #tDest.Col1=S.Col1 
    
    --
    -- Look at the tables again to see that
    --  the destination table has changed to match
    --  the source table.
    
    select *
    from #tSource
    Select *
    from #tDest
    
    --
    -- Clean Up
    --
    drop table #tSource
    drop table #tDest
    
    0 讨论(0)
  • 2020-11-29 14:55

    This worked for me: social.msdn.microsoft.com/Forums/en/transactsql/thread/02c6da90-954d-487d-a823-e24b891ec1b0?prof=required

    if exists (
        select  * from tempdb.dbo.sysobjects o
        where o.xtype in ('U') 
    
       and o.id = object_id(N'tempdb..#tempTable')
    )
    DROP TABLE #tempTable;
    
    0 讨论(0)
  • 2020-11-29 14:56

    Instead of dropping and re-creating the temp table you can truncate and reuse it

    IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        Truncate TABLE #Results
    else
        CREATE TABLE #Results
        (
            Company             CHAR(3),
            StepId              TINYINT,
            FieldId             TINYINT,
        )
    

    If you are using Sql Server 2016 or Azure Sql Database then use the below syntax to drop the temp table and recreate it. More info here MSDN

    Syntax

    DROP TABLE [ IF EXISTS ] [ database_name . [ schema_name ] . | schema_name . ] table_name [ ,...n ]

    Query:

    DROP TABLE IF EXISTS tempdb.dbo.#Results
    CREATE TABLE #Results
      (
       Company             CHAR(3),
       StepId              TINYINT,
       FieldId             TINYINT,
      )
    
    0 讨论(0)
  • 2020-11-29 14:57

    This worked for me,

    IF OBJECT_ID('tempdb.dbo.#tempTable') IS NOT NULL 
    DROP TABLE #tempTable; 
    

    Here tempdb.dbo(dbo is nothing but your schema) is having more importance.

    0 讨论(0)
提交回复
热议问题