临时表已存在

BRD*_*oid 2 sql sql-server

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

我想我写的查询是正确的。

   SELECT [Name]
        INTO #TEMP_REJECT
        FROM #TEMP_VALIDATION
        WHERE Name = @Name
Run Code Online (Sandbox Code Playgroud)

我正在尝试插入 #TEMP_REJECT FROM #TEMP_VALIDATION

错误信息

“数据库中已经有一个名为‘#TEMP_REJECT’的对象。”

请建议。

感谢您的帮助。电阻

Dea*_*nOC 6

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

我建议你添加

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL
    DROP TABLE #TEMP_REJECT
Run Code Online (Sandbox Code Playgroud)

在您的 select 语句前面。这保证了执行 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
Run Code Online (Sandbox Code Playgroud)


Hyb*_*s95 5

这个答案会帮助你:https : //stackoverflow.com/a/8560644/3635715

简而言之:SELECT INTO创建表然后插入记录。 INSERT INTO只插入记录。

所以在你的情况下,因为#TEMP_REJECT已经存在,SELECT INTO因为它不能再次创建表而被拒绝,所以你必须使用INSERT INTOafter first SELECT 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
Run Code Online (Sandbox Code Playgroud)

参考文献:
INTO 子句
INSERT 子句