SQL Server 中操作存储过程返回的表结果集

 先将整个代码放出来,接下来一步步说明。

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)
)

insert into #temTable exec proc_gd_expandmultiorderbomBYSO 'HS19-2222'

select 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)
)

步骤二:将结果集复制到临时表中

insert 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 

不懂请看https://blog.csdn.net/Alone_in_/article/details/102933521

步骤四:对临时表进行操作

select 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

这里又掉一个坑:https://blog.csdn.net/Alone_in_/article/details/102933739

步骤五:就是将临时表删除啦!

drop table #temTable

始乱终弃不是我本意,为了节省空间嘛。

补充:

我在另一个地方再次用这种方法,发现报错了!

消息 8164,级别 16,状态 1,过程 MaterialSplit,第 65 行
An INSERT EXEC statement cannot be nested.

因为在存储过程里面返回的结果集,也是通过 insert exec 另一个存储过程 生成的,而sqlserver不允许这种嵌套。

解决方案:

https://blog.csdn.net/ocean42234111/article/details/52301298

你可能感兴趣的:(#,数据库)