Temporary table in SQL server causing ' There is already an object named' error

前端 未结 5 987
难免孤独
难免孤独 2021-02-02 05:10

I have the following issue in SQL Server, I have some code that looks like this:

DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_         


        
相关标签:
5条回答
  • 2021-02-02 05:49

    You must modify the query like this

    CREATE TABLE #TMPGUARDIAN(
    LAST_NAME NVARCHAR(30),
    FRST_NAME NVARCHAR(30))  
    
    INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME)
    SELECT LAST_NAME,FRST_NAME  FROM TBL_PEOPLE
    

    -- Make a last session for clearing the all temporary tables. always drop at end. In your case, sometimes, there might be an error happen if the table is not exists, while you trying to delete.

    DROP TABLE #TMPGUARDIAN
    

    Avoid using insert into Because If you are using insert into then in future if you want to modify the temp table by adding a new column which can be filled after some process (not along with insert). At that time, you need to rework and design it in the same manner.

    Use Table Variable http://odetocode.com/articles/365.aspx

    declare @userData TABLE(
     LAST_NAME NVARCHAR(30),
        FRST_NAME NVARCHAR(30)
    )
    

    Advantages No need for Drop statements, since this will be similar to variables. Scope ends immediately after the execution.

    0 讨论(0)
  • 2021-02-02 05:54

    Some times you may make silly mistakes like writing insert query on the same .sql file (in the same workspace/tab) so once you execute the insert query where your create query was written just above and already executed, it will again start executing along with the insert query.

    This is the reason why we are getting the object name (table name) exists already, since it's getting executed for the second time.

    So go to a separate tab to write the insert or drop or whatever queries you are about to execute.

    Or else use comment lines preceding all queries in the same workspace like

    CREATE -- …
    -- Insert query
    INSERT INTO -- …
    
    0 讨论(0)
  • 2021-02-02 05:55

    I usually put these lines at the beginning of my stored procedure, and then at the end.

    It is an "exists" check for #temp tables.

    IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
    begin
            drop table #MyCoolTempTable
    end
    

    Full Example:

    CREATE PROCEDURE [dbo].[uspTempTableSuperSafeExample]
    AS
    BEGIN
        SET NOCOUNT ON;
    
    
        IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
        BEGIN
                DROP TABLE #MyCoolTempTable
        END
    
    
        CREATE TABLE #MyCoolTempTable (
            MyCoolTempTableKey INT IDENTITY(1,1),
            MyValue VARCHAR(128)
        )  
    
        INSERT INTO #MyCoolTempTable (MyValue)
            SELECT LEFT(@@VERSION, 128)
            UNION ALL SELECT TOP 10 LEFT(name, 128) from sysobjects
    
        SELECT MyCoolTempTableKey, MyValue FROM #MyCoolTempTable
    
    
        IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
        BEGIN
                DROP TABLE #MyCoolTempTable
        END
    
    
        SET NOCOUNT OFF;
    END
    GO
    
    0 讨论(0)
  • 2021-02-02 06:04

    In Azure Data warehouse also this occurs sometimes, because temporary tables created for a user session.. I got the same issue fixed by reconnecting the database,

    0 讨论(0)
  • 2021-02-02 06:09

    You are dropping it, then creating it, then trying to create it again by using SELECT INTO. Change to:

    DROP TABLE #TMPGUARDIAN
    CREATE TABLE #TMPGUARDIAN(
    LAST_NAME NVARCHAR(30),
    FRST_NAME NVARCHAR(30))  
    
    INSERT INTO #TMPGUARDIAN 
    SELECT LAST_NAME,FRST_NAME  
    FROM TBL_PEOPLE
    

    In MS SQL Server you can create a table without a CREATE TABLE statement by using SELECT INTO

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