SQL Server 2008 R2:从存储过程返回结果并插入到临时表中



我有一个testing表,其中包含一些数据:

表:

select * from testing;
cola colb
---------
 A    B
 C    D
 C    X
 S    T
 S    Q

存储过程:

CREATE PROC spTesting
   @TableName nvarchar(max)
AS
   DECLARE @sql nvarchar(max)
   SET @sql = 'SELECT * from '+ @TableName + ''
   EXEC(@sql)
GO

执行存储过程:

execute spTesting 'testing'

我会得到结果:

cola colb
---------
 A    B
 C    D
 C    X
 S    T
 S    Q

注意:在执行存储过程后,我想将结果插入到temptable中,我不想用以前的结构声明它。

类似:

 select * into temptable from execute spTesting 'testing'

有一个简单的语法,可以插入到表/temptable中,这是过程的结果集

INSERT INTO TempTable
EXEC MyProc

但这种方法的问题是,在您完成上述操作之前,TempTable应该已经存在。

当调用存储过程并将其结果集插入表中时,不能像使用select语句select * INTO temptabe From tablename那样动态创建表。

您需要先创建此表,然后从存储过程中插入。

现在,由于有些表可以有50列,在执行过程之前,可以找到它们的DDL并创建表,因此有一种简单的方法可以绕过。。。。

-- before you execute the procedure 
SELECT * INTO TempTable FROM TargetTable WHERE 1 =2 
-- this will create an empty table with matching schema of your TargetTable 
-- Now execute the procedure 
INSERT INTO TempTable 
EXECUTE spTesting 'TargetTable'

最新更新