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

ステップ1:テンポラリ・テーブルの作成
テーブルの構造は、ストレージ・プロシージャが返す結果セットと同じであり、タイプなども同じであることが望ましい.
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)
)

ステップ2:結果セットをテンポラリ・テーブルにコピーする
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
ステップ4:テンポラリ・テーブルの操作
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
ステップ5:テンポラリ・テーブルを削除します!
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