我有一个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'