如何将不确定的多个结果集插入到临时表中?

readings 2011-11-21 11:11:11

IF OBJECT_ID('tempdb..##ScraperReportTmp') IS NOT NULL
BEGIN
DROP TABLE ##ScraperReportTmp
END

DECLARE @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',那么以上代码就会报错。

所以,我的问题是,如何将多个结果集插入到临时表中,当然,我想这个临时表应该是多个临时表。

谢谢!
...全文
190 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
readings 2011-11-23
  • 打赏
  • 举报
回复
今天早上来了,继续顶自己!
中国风 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 readings 的回复:]

引用 14 楼 wufeng4552 的回复:
引用 13 楼 readings 的回复:
引用 11 楼 roy_88 的回复:
引用 9 楼 readings 的回复:

谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的


結果集多個,這通過程序可以獲取
不應該放在存儲過程里去獵取


首……
[/Quote]

可以,不推薦

可用xml,把結果集分別生成xml,再返回。
-晴天 2011-11-21
  • 打赏
  • 举报
回复
如果这些查询语句所得的结果的列结构相同,只要直接执行就行了:
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
readings 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wufeng4552 的回复:]
引用 13 楼 readings 的回复:
引用 11 楼 roy_88 的回复:
引用 9 楼 readings 的回复:

谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的


結果集多個,這通過程序可以獲取
不應該放在存儲過程里去獵取


首先,感谢回复!

但是,真的没有办法使用SQL来……
[/Quote]

真的不能用SQL实现吗?

谢谢。
水族杰纶 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 readings 的回复:]
引用 11 楼 roy_88 的回复:
引用 9 楼 readings 的回复:

谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的


結果集多個,這通過程序可以獲取
不應該放在存儲過程里去獵取


首先,感谢回复!

但是,真的没有办法使用SQL来回去吗?非要通过程序(C#,VB)来获取吗?
……
[/Quote]
有时候用程序去实现
比SQL更方便
为什么不用呢
readings 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 roy_88 的回复:]
引用 9 楼 readings 的回复:

谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的


結果集多個,這通過程序可以獲取
不應該放在存儲過程里去獵取
[/Quote]

首先,感谢回复!

但是,真的没有办法使用SQL来回去吗?非要通过程序(C#,VB)来获取吗?

其实,我想,只要SQL SERVER能够自动分析出给定的SQL字符串是几个结果集就应该有希望办到的
水族杰纶 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 readings 的回复:]
当然,允许使用多个临时表存储这些结果集
[/Quote]
如果是程序端需要
多个结果集合
程序端
dataset会自动分成table(0),table(1),...
不用临时表
中国风 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 readings 的回复:]

谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的
[/Quote]

結果集多個,這通過程序可以獲取
不應該放在存儲過程里去獵取
readings 2011-11-21
  • 打赏
  • 举报
回复
当然,允许使用多个临时表存储这些结果集
readings 2011-11-21
  • 打赏
  • 举报
回复
谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的
-晴天 2011-11-21
  • 打赏
  • 举报
回复
SET @_CutSQL='SELECT * FROM dbo.TFReport union all select * from dbo.othertable1 union all select * from dbo.othertable2 union all...'
SET @SQL=
'SELECT
*
INTO ##ScraperReportTmp FROM (
'+ @_CutSQL +'
) A'
EXEC(@SQL)
SELECT * FROM ##ScraperReportTmp

--小F-- 2011-11-21
  • 打赏
  • 举报
回复
多个是什么意思?多个就多用多个变量 多个临时表吧。
中国风 2011-11-21
  • 打赏
  • 举报
回复
最好別用全局臨時表,用局部臨時表處理
水族杰纶 2011-11-21
  • 打赏
  • 举报
回复
你多个select语句是各自分开的
本省从语法上就是错误的
AcHerat 2011-11-21
  • 打赏
  • 举报
回复
传入的参数

如'SELECT * FROM dbo.TFReport union all SELECT * FROM dbo.TFProject'

注意两个select的字段数目,字段数据类型。。。
中国风 2011-11-21
  • 打赏
  • 举报
回复
INTO ##ScraperReportTmp--改為
Create table #ScraperReportTmp

insert #ScraperReportTmp EXEC(@SQL)
快溜 2011-11-21
  • 打赏
  • 举报
回复
'SELECT * FROM dbo.TFReport union all SELECT * FROM dbo.TFProject'
AcHerat 2011-11-21
  • 打赏
  • 举报
回复
你在前边传入参数的时候拼接下,两个select中间用union连接。
readings 2011-11-21
  • 打赏
  • 举报
回复
不能将这些结果集都插入到N个临时表中吗?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧