我尝试在一个存储过程中使用两个 insert into 语句,如下所示:
CREATE PROCEDURE dbo.test
AS
BEGIN
DROP TABLE IF EXISTS #temp;
SELECT *
INTO #temp
FROM sys.column_master_keys AS CMK;
-- some statement
-- some statement
-- some statement
DROP TABLE IF EXISTS #temp;
SELECT *
INTO #temp
FROM INFORMATION_SCHEMA.COLUMNS AS C;
END;
错误信息:
<块引用>数据库中已经有一个名为“#temp”的对象。
如何在一个存储过程中使用一张临时表进行多次插入?
答案 0 :(得分:1)
发生这种情况是因为代码在运行之前被编译。在编译阶段,SQL Server 会看到创建表的两个 INSERT
语句。它不会执行它们,因为它只是设计执行计划。
因为代码没有被执行,编译阶段错过了DROP TABLE
。唉。执行第二个时发现该表已经存在,产生错误。
在任何情况下,通过为表格指定不同的名称,这很容易解决。
答案 1 :(得分:1)
您可以在一个存储过程中使用一个临时表来执行多个 insert into 语句。
要实现这一点,您必须使用动态 SQL。
CREATE PROCEDURE dbo.test
AS
BEGIN
DROP TABLE IF EXISTS #temp;
EXEC('SELECT *
INTO #temp
FROM sys.column_master_keys AS CMK;')
-- some statement
-- some statement
-- some statement
DROP TABLE IF EXISTS #temp;
EXEC('SELECT *
INTO #temp
FROM INFORMATION_SCHEMA.COLUMNS AS C;')
END;