SQL Server2008创建无参存储过程

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 06:23   80   0
将原有的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 也可以自己建测试数据!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP