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

本文详细介绍了在SQL Server中使用临时表进行数据处理的步骤,包括创建、填充、修改及清理临时表的过程。特别关注了数据类型调整以避免数据截断错误,并解决了在存储过程中嵌套使用INSERT EXEC语句的问题。
该文章已生成可运行项目,

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

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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/ocean42234111/article/details/52301298

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值