存储过程:数据库中已存在名为“#columntable”的对象

时间:2017-02-09 09:21:10

标签: sql sql-server tsql

请参阅以下代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE Test
AS
BEGIN
    begin
    select * into #dbreviews from dbreviews
    end

    drop table #dbreviews

    begin
    select * into #dbreviews from dbreviews
    end

END
GO

我得到的错误是:

  

数据库中已有一个名为'#dbreviews'的对象。

这样的问题:There is already an object named '#columntable' in the database告诉我这应该是可能的。

3 个答案:

答案 0 :(得分:4)

根据SQL Server规范,不允许使用它。请参阅documentation

  

如果在单个存储中创建了多个临时表   程序或批次,它们必须有不同的名称。

您正在创建两个名称为#dbreviews的临时表。这是不允许的。

答案 1 :(得分:1)

在您的PROC结束时,#dbreviews存在。再次运行时,它已经存在。如果要在每次运行proc时重新创建,请使用:

IF OBJECT_ID('tempdb..#dbreviews') IS NOT NULL
THEN
  drop table #dbreviews
END IF

select * into #dbreviews from dbreviews

答案 2 :(得分:0)

请确保您使用“更改”语法:

ALTER PROCEDURE

如果粘贴代码,则可能需要将“ create”替换为“ alter” ...这只是发生在我身上,令人沮丧,所以我希望这对其他人有所帮助。

注意:这是我对一个稍有不同的问题的回答,因此我回收了