将原有的SQL查询语句改为使用存储过程来实现!原有SQL如下:
--StorageDetail 原料入库表, shipmentdetail 原料出库表, RawMaterInfo原料信息表 (原料名称 RmName为主键)
select a.物料名称 , a.总入库数 , a.总退货数 , a.总补回数 , a.总出库数 , a.库存数 库存数或该时间段进出差值,
f.Model 型号 , f.Remarks 备注 , f.unit 单位 from
(select d.物料名称 , d.总入库数 , d.总退货数 总退货数, d.总补回数 总补回数, isnull(e.总出库数 , 0) 总出库数 ,
((d.总入库数 - ISNULL(e.总出库数 , 0) - isnull(d.总退货数, 0) + isnull(d.总补回数, 0))) 库存数 from
(select SUM(isnull(Inputcnt , 0)) 总入库数 , SUM(isnull(returncnt , 0)) 总退货数 , SUM(isnull(backcnt , 0)) 总补回数 , RmName 物料名称
from StorageDetail where 1 = 1 group by RmName ) as d
left join( select SUM( isnull (outcnt , 0)) 总出库数 , RmName 物料名称 from [shipmentdetail] group by RmName) as e
on d.物料名称 = e.物料名称 ) as a ,( select * from RawMaterInfo) as f where f.RawMaterName = a.物料名称
查询的结果为:
接下来将改为存储过程来实现:
1.先创建一个存储过程
2.创建完成后修改名称,接下来就是写SQL语句了:
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
CREATE PROCEDURE querystock
-- Add the parameters for the stored procedure here
--<@Param1, sysname, @p1>
=
, --<@Param2, sysname, @p2>
=
AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here --StorageDetail 原料入库表, shipmentdetail 原料出库表, RawMaterInfo原料信息表 (原料名称 RmName为主键) --创建临时表 select * into #tmprmname from RawMaterInfo select SUM(isnull(Inputcnt , 0)) 总入库数 , SUM(isnull(returncnt , 0)) 总退货数 , SUM(isnull(backcnt , 0)) 总补回数 , RmName 物料名称 into #tmpinputcnt from StorageDetail group by RmName select SUM( isnull (outcnt , 0)) 总出库数 , RmName 物料名称 into #tmpoutcnt from [shipmentdetail] group by RmName --进行查询 select e.物料名称 , e.总入库数 , e.总退货数 , e.总补回数 , e.总出库数 , e.库存数 库存数或该时间段进出差值, f.Model 型号 , f.Remarks 备注 , f.unit 单位 from ( select a.物料名称 , a.总入库数 , a.总退货数 总退货数, a.总补回数 总补回数, isnull(b.总出库数 , 0) 总出库数 , ((a.总入库数 - ISNULL(b.总出库数 , 0) - isnull(a.总退货数, 0) + isnull(a.总补回数, 0))) 库存数 from #tmpinputcnt a left join #tmpoutcnt b on a.物料名称 = b.物料名称 ) as e , #tmprmname as f where e.物料名称 = f.RawMaterName --删除临时表 drop table #tmprmname drop table #tmpinputcnt drop table #tmpoutcnt END GO
3执行.刚刚创建的存储过程,结果如下图
这是一个简单的存储过程而已,SQL语句如写的不好的地方,请大神指出,不胜感激!
测试数据地址:http://download.csdn.net/detail/gx_489587482/9593238 也可以自己建测试数据!