2017-04-25 59 views
0

嗨我有一个临时表,其中我试图插入基于where条件的记录,但它会抛出一个错误,它已经存在。 我试图更改名称,但这不是问题,因为临时表在会话结束时被删除。临时表已存在

我想我正在写查询的权利。

SELECT [Name] 
     INTO #TEMP_REJECT 
     FROM #TEMP_VALIDATION 
     WHERE Name = @Name 

我试图插入#TEMP_REJECT FROM #TEMP_VALIDATION

错误消息

“目前已经在数据库中名为 '#TEMP_REJECT' 的对象。”

请建议。

谢谢你的帮助。 [R

+0

您能否给我们您遇到确切的错误信息?同时给我们表格的定义。 – Hybris95

+1

嗨我已经更新了错误消息'数据库中已有名为'#TEMP_REJECT'的对象'的问题。' – BRDroid

+0

非主题,可能值得考虑表变量 - http:// stackoverflow。com/questions/11857789/when-should-i-use-a-table-variable-vs-temporary-table-in-sql-server – user5226582

回答

2

如果不存在表,则SQL Server不会告诉您该表不存在。

我建议你在SELECT语句前加上

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
    DROP TABLE #TEMP_REJECT 

。这保证了执行select时临时表不会存在。

所以,你的发言变得

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
     DROP TABLE #TEMP_REJECT 

SELECT [Name] 
      INTO #TEMP_REJECT 
      FROM #TEMP_VALIDATION 
      WHERE Name = @Name 
+0

非常感谢,解决了它 – BRDroid

2

这个答案将帮助您: https://stackoverflow.com/a/8560644/3635715

作简短:SELECT INTO创建表,然后插入记录。 INSERT INTO只插入记录。

你的情况

所以,既然#TEMP_REJECT已经存在,SELECT INTO被拒绝,因为它不能再创建表,所以你必须先SELECT INTO后使用INSERT INTO

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
BEGIN 
    INSERT INTO #TEMP_REJECT 
    SELECT [Name] 
    FROM #TEMP_VALIDATION 
    WHERE Name = @Name 
END 
ELSE 
BEGIN 
    SELECT [Name] 
    INTO #TEMP_REJECT 
    FROM #TEMP_VALIDATION 
    WHERE Name = @Name 
END 

参考文献:
INTO Clause
INSERT Clause

1

尝试,如果OBJECT_ID插入

前检查( 'tempdb中..#TEMP_REJECT')不为空 DROP TABLE #TEMP_REJECT

SELECT [Name] 
     INTO #TEMP_REJECT 
     FROM #TEMP_VALIDATION 
     WHERE Name = @Name 

如果SQL说,有临时表,在插入之前必须有一个表