带有游标的应用的存储过程

USE [ChiefMes]
GO

/****** Object: StoredProcedure [dbo].[SELECT_TotalNum] Script Date: 05/12/2015 09:08:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


/**********************************
Author:Derek
CreateDate:2008-12-18 2008-03-25
EXEC SELECT_TotalNum 'M0001','0001','I0001','2008-03-27 00:00','2008-03-27 23:59'
EXEC SELECT_TotalNum 'IM022408','MO10110211','2100501409','2008-07-19 12:00:00','2009-07-19 23:59:00'

EXEC SELECT_TotalNum '909030276001','IM022413','MO10360211','2122402728','2009-04-03 00:00:00','2009-04-03 23:59:00'
Function:查询啤数序号
**********************************/
ALTER PROCEDURE [dbo].[SELECT_TotalNum]
(
@Dispatchorder varchar(100),
@MachineNo VARCHAR(100),
@MouldNo VARCHAR(100),
@ProductNo VARCHAR(100),
@bDate VARCHAR(19),
@eDate VARCHAR(19)
)
AS
CREATE TABLE #TEMP
(
SelectID INT,
RowID INT,
ID INT,
TotalNum INT
)
declare @ID int,@TotalNum int,@Count int,@I int
set @I=1

select @Count=count(*)
from (
SELECT distinct TotalNum
FROM DataHistory
WHERE 1=1 AND Dispatchorder= @Dispatchorder --and clientip=@MachineNo --AND MachineNo=@MachineNo --AND MouldNo=@MouldNo AND ProductNo=@ProductNo
AND CONVERT(CHAR(19),BeginCycle,121)>=@bDate
AND CONVERT(CHAR(19),BeginCycle,121)<=@eDate
) a

DECLARE _CURSOR cursor for
SELECT DISTINCT ID,TotalNum
FROM DataHistory
WHERE 1=1 AND Dispatchorder= @Dispatchorder --and clientip=@MachineNo --AND MachineNo=@MachineNo --AND MouldNo=@MouldNo AND ProductNo=@ProductNo
AND CONVERT(CHAR(19),BeginCycle,121)>=@bDate
AND CONVERT(CHAR(19),BeginCycle,121)<=@eDate

ORDER BY TotalNum DESC

open _CURSOR
fetch next from _CURSOR into @ID,@TotalNum
while(@@fetch_status=0)
begin
if not exists(select TotalNum from #TEMP where TotalNum=@TotalNum)
begin
insert into #TEMP(SelectID,RowID,ID,TotalNum) values(@I,@Count,@ID,@TotalNum)
set @I=@I+1
set @Count=@Count-1
end

fetch next from _CURSOR into @ID,@TotalNum
end
close _CURSOR
deallocate _CURSOR

select * from #TEMP order by TotalNum DESC
drop table #TEMP


GO

GO
/*
Create By:wuchun on 2014/06/30
Remark:获取BOM
create table #g_BOM(lvl int, RootBOMNO varchar(50), CurBOMNO varchar(50), ItemNO varchar(50), ItemType varchar(10), Qty int)
*/
ALTER proc [dbo].[st_MES_GetBOM](
@in_RootBOMNO varchar(100) = '',
@in_CurBOMNO varchar(100) = '',
@in_ItemNo varchar(100) = '',
@in_lvl int = 1
)
as
declare @ID int, @BOMNO varchar(50), @ItemNO varchar(50), @ItemName varchar(100)
declare @ItemType varchar(50), @Qty decimal(10,2), @Scrap decimal(10,2),@Unit varchar(10)

select @ItemNO = @in_ItemNo
declare CursorBOM cursor local
For Select BOMNO, ItemNO, ItemName,ItemType, isnull(Qty,1), isnull(Scrap,1), Unit
From MES_BOM
where BOMNO = @in_CurBOMNO and ParentItemNO = @ItemNO
Open CursorBOM
Fetch next From CursorBOM Into @BOMNO, @ItemNO,@ItemName, @ItemType, @Qty, @Scrap, @Unit
While(@@Fetch_Status = 0)
Begin
if(@ItemType = '')
select @ItemType = l.Lan_CN from sys_pubcode s
join Sys_Language l on s.KeyName = l.KeyName
join MES_Item i on i.ItemNO = @ItemNO and s.FieldValue = i.ItemType
where fieldname ='ddl_ItemType' and l.ModuleCode = '70001'


insert into #g_BOM(lvl, RootBOMNO , CurBOMNO, ItemNO ,ItemName, ItemType, Qty, Scrap, Unit)
select @in_lvl, @in_RootBOMNO, @BOMNO, @ItemNO, @ItemName, @ItemType, @Qty, @Scrap, @Unit

set @in_lvl = @in_lvl+1
exec st_MES_GetBOM @in_RootBOMNO, @BOMNO,@ItemNO, @in_lvl
Fetch next From CursorBOM Into @BOMNO, @ItemNO,@ItemName, @ItemType, @Qty, @Scrap, @Unit
End
Close CursorBOM
Deallocate CursorBOM

原文地址:https://www.cnblogs.com/chengjun/p/4497618.html