SQLServer中操作存储过程返回的表结果集
先将整个代码放出来,接下来⼀步步说明。
create table #temTable(
FSerialNum int,
发凡起例billNo varchar(200),
Flevel varchar(200),
beginDate datetime,
FNumber varchar(500),
FName varchar(500),
眩晕症是什么病FModel varchar(1000),
FAttribute varchar(200),
FUnit varchar(200),
FDosage decimal(28,10),
FLoss decimal(28,10),
FNetWeight decimal(28,10)
遥远的绝响
)
inrt into #temTable exec proc_gd_expandmultiorderbomBYSO 'HS19-2222'
lect FSerialNum,billNo,Flevel,beginDate,FNumber,FName,FModel,FAttribute,FUnit,SUM(FDosage)as FDosage,FLoss,FNetWeight
from #temTable where customStatus=990240
group by FNumber,FSerialNum,billNo,Flevel,beginDate,FName,FModel,FAttribute,FUnit,FLoss,FNetWeight
drop table #temTable
步骤⼀:创建⼀个临时表
表的结构跟存储过程返回的结果集是相同的,类型什么的最好也⼀样。
create table #temTable(
FSerialNum int,
billNo varchar(200),
Flevel varchar(200),
beginDate datetime,
FNumber varchar(500),
FName varchar(500),
FModel varchar(1000),
FAttribute varchar(200),
FUnit varchar(200),
郁郁寡欢的意思FDosage decimal(28,10),
FLoss decimal(28,10),
惠普打印机加墨
FNetWeight decimal(28,10)
)
步骤⼆:将结果集复制到临时表中
红烧肉丸子inrt into #temTable exec proc_gd_expandmultiorderbomBYSO 'HS19-2222'
此处,我踩到了⼀个坑。刚开始 FModel 的类型我设为 varchar(100),结果报错:String or binary data would be truncated.解决⽅法是 alter table #temTable alter column FModel varchar(1000) not null
步骤四:对临时表进⾏操作
lect FSerialNum,billNo,Flevel,beginDate,FNumber,FName,
FModel,FAttribute,FUnit,SUM(FDosage)as FDosage,FLoss,FNetWeight
from #temTable
where customStatus=990240
group by FNumber,FSerialNum,billNo,Flevel,beginDate,FName,FModel,FAttribute,FUnit,FLoss,FNetWeight
步骤五:就是将临时表删除啦!
drop table #temTable
始乱终弃不是我本意,为了节省空间嘛。
补充:
我在另⼀个地⽅再次⽤这种⽅法,发现报错了!
望海潮赏析
消息 8164,级别 16,状态 1,过程 MaterialSplit,第 65 ⾏
沆瀣一气An INSERT EXEC statement cannot be nested.
因为在存储过程⾥⾯返回的结果集,也是通过 inrt exec 另⼀个存储过程 ⽣成的,⽽sqlrver不允许这种嵌套。解决⽅案: