IF OBJECT_ID('tempdb..##ScraperReportTmp') IS NOT NULL
BEGIN
DROP TABLE ##ScraperReportTmp
ENDDECLARE @SQL NVARCHAR(MAX)
DECLARE @_CutSQL NVARCHAR(MAX)
SET @_CutSQL='SELECT * FROM dbo.TFReport'
SET @SQL=
'SELECT
*
INTO ##ScraperReportTmp FROM (
'+ @_CutSQL +'
) A'
EXEC(@SQL)
SELECT * FROM ##ScraperReportTmp以上代码中,如果@_CutSQL是一条SELECT语句,例如'SELECT * FROM dbo.TFReport',是可以的,没有任何问题。
但是,问题是如果@_CutSQL是多个SELECT语句呢?例如'SELECT * FROM dbo.TFReport SELECT * FROM dbo.TFProject',那么以上代码就会报错。所以,我的问题是,如何将多个结果集插入到临时表中,当然,我想这个临时表应该是多个临时表。谢谢!
Create table #ScraperReportTmpinsert #ScraperReportTmp EXEC(@SQL)
本省从语法上就是错误的
SET @SQL=
'SELECT
*
INTO ##ScraperReportTmp FROM (
'+ @_CutSQL +'
) A'
EXEC(@SQL)
SELECT * FROM ##ScraperReportTmp
多个结果集合
程序端
dataset会自动分成table(0),table(1),...
不用临时表
首先,感谢回复!但是,真的没有办法使用SQL来回去吗?非要通过程序(C#,VB)来获取吗?其实,我想,只要SQL SERVER能够自动分析出给定的SQL字符串是几个结果集就应该有希望办到的
比SQL更方便
为什么不用呢
真的不能用SQL实现吗?谢谢。
create table t1(id int,col varchar(10))
insert into t1 select 1,'aaa'
insert into t1 select 2,'bbb'
create table t2(abc int,def varchar(10))
insert into t2 select 243,'fawed'
insert into t2 select 12344,'bbasdwaeb'
create table t3(faew int,faead varchar(10))
insert into t3 select 64523,'vasdf'
insert into t3 select 23,'fq34fd'
go
create procedure unionallrecord(
@sql1 nvarchar(max),
@sql2 nvarchar(max),
@sql3 nvarchar(max)
--如还有,继续
)as
begin
exec(@sql1)
exec(@sql2)
exec(@sql3)
--如还有,继续
end
go
create table #t(id int,col varchar(10))
insert into #t
exec unionallrecord 'select * from t1','select * from t2','select * from t3'select * from #t
/*
id col
----------- ----------
1 aaa
2 bbb
243 fawed
12344 bbasdwaeb
64523 vasdf
23 fq34fd(6 行受影响)*/
go
drop table t1,t2,t3,#t
drop procedure unionallrecord
可以,不推薦可用xml,把結果集分別生成xml,再返回。