存储过程,游标,循环,数据库邮件完整实例
2010-01-28 14:13
330 查看
USE [WTCS]
GO
/****** Object: StoredProcedure [dbo].[sp_Week] Script Date: 01/28/2010 14:13:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: deepwishly
-- Create date: 2010.1.15
-- Description: 周数据统计
-- =============================================
ALTER procedure [dbo].[sp_Week]
as
begin
--声明变量部分
declare @todayDate datetime
declare @lastWeekStartDate datetime
declare @temp varchar(50) --用于存放游标值的中间变量
declare @num int --记录上周是否有数据,大于零,说明抄表器已经将周数据,发送过来,就不需要计算了
declare @count int --记录临时表中是否有数据
--赋值部分
set @todayDate = (select Convert(varchar(100),GETDATE(),23))
set @lastWeekStartDate = (select DATEADD(day,-7,@todayDate))
--如果存在,删除临时表
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempActualDate') and type='U')
begin
drop table #tempActualDate
end
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempCircleTable') and type='U')
begin
drop table #tempCircleTable
end
--创建二个临时表,
select distinct Number into #tempCircleTable from equipment_ActualData -- 用于游标循环
select * into #tempActualDate from equipment_ActualData --用于操作提供操作的临时表
begin tran
declare tempCircleTable_Cursor cursor for select Number from #tempCircleTable
open tempCircleTable_Cursor
while(@@FETCH_STATUS=0) --返回被fetch语句执行的最后游标的状态
begin
fetch next from tempCircleTable_Cursor into @temp
--如果存在临时表,将其删除
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#temp_WeekTable') and type='U')
begin
drop table #temp_WeekTable
end
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#temp_temp') and type='U')
begin
drop table #temp_temp
end
--创建一个临时表用于存储游标等于@temp的一周数据
select * into #temp_WeekTable from #tempActualDate where Number =@temp
and
datediff(d,ReceiveDate,@lastWeekStartDate)<=0 order by receiveDate asc
select * into #temp_temp from #temp_WeekTable order by receiveDate desc
--记录临时表中是否有数据
set @count = (select count(*) from #temp_WeekTable)
--声明用于存放一周数据起始与结束二条数据变量
--存放起始日期的
declare @ReceiveDate datetime
declare @Equipment_type nvarchar(100)
declare @Number int
declare @EngineHour_S float
declare @HoistHour_S float
declare @TrolleryHour_S float
declare @GantryHour_S float
declare @HTHour_S float
declare @Twistlock_S float
declare @Bak1_H_S float
declare @Bak2_H_S float
declare @Bak3_H_S float
declare @Bak1_D_S float
--声明一周结束日期的
declare @EngineHour_E float
declare @HoistHour_E float
declare @GantryHour_E float
declare @HTHour_E float
declare @TrolleryHour_E float
declare @Twistlock_E float
declare @Bak1_H_E float
declare @Bak2_H_E float
declare @Bak3_H_E float
declare @Bak1_D_E float
--声明插入周数据表中的变量
declare @EngineHour_Sub float
declare @HoistHour_Sub float
declare @TrolleryHour_Sub float
declare @GantryHour_Sub float
declare @HTHour_Sub float
declare @Twistlock_Sub float
declare @Bak1_H_Sub float
declare @Bak2_H_Sub float
declare @Bak3_H_Sub float
declare @Bak1_D_Sub float
--为各变量赋值
set @ReceiveDate =(select top 1 ReceiveDate from #temp_WeekTable )
set @Equipment_type =(select top 1 Equipment_type from #temp_WeekTable )
set @Number =(select top 1 Number from #temp_WeekTable )
set @EngineHour_S =(select top 1 EngineHour from #temp_WeekTable )
set @HoistHour_S =(select top 1 HoistHour from #temp_WeekTable )
set @TrolleryHour_S = (select top 1 TrolleryHour from #temp_WeekTable)
set @GantryHour_S =(select top 1 GantryHour from #temp_WeekTable )
set @HTHour_S =(select top 1 HTHour from #temp_WeekTable )
set @Twistlock_S =(select top 1 Twistlock from #temp_WeekTable )
set @Bak1_H_S =(select top 1 Bak1_H from #temp_WeekTable )
set @Bak2_H_S =(select top 1 Bak2_H from #temp_WeekTable )
set @Bak3_H_S =(select top 1 Bak3_H from #temp_WeekTable )
set @Bak1_D_S =(select top 1 Bak1_D from #temp_WeekTable )
set @EngineHour_E =(select top 1 EngineHour from #temp_temp )
set @HoistHour_E=(select top 1 HoistHour from #temp_temp )
set @TrolleryHour_E = (select top 1 TrolleryHour from #temp_temp)
set @GantryHour_E =(select top 1 GantryHour from #temp_temp )
set @HTHour_E =(select top 1 HTHour from #temp_temp )
set @Twistlock_E =(select top 1 Twistlock from #temp_temp )
set @Bak1_H_E =(select top 1 Bak1_H from #temp_temp )
set @Bak2_H_E =(select top 1 Bak2_H from #temp_temp )
set @Bak3_H_E =(select top 1 Bak3_H from #temp_temp )
set @Bak1_D_E =(select top 1 Bak1_D from #temp_temp )
--整理待插入周数据表数据
set @EngineHour_Sub =(@EngineHour_E-@EngineHour_S)
set @HoistHour_Sub =(@HoistHour_E-@HoistHour_S)
set @TrolleryHour_Sub =(@TrolleryHour_E-@TrolleryHour_S)
set @GantryHour_Sub =(@GantryHour_E-@GantryHour_S)
set @HTHour_Sub =(@HoistHour_E-@HoistHour_S)
set @Twistlock_Sub =(@Twistlock_E-@Twistlock_S)
set @Bak1_H_Sub =(@Bak1_H_E-@Bak1_H_S)
set @Bak2_H_Sub =(@Bak2_H_E-@Bak2_H_S)
set @Bak3_H_Sub =(@Bak3_H_E-@Bak3_H_S)
set @Bak1_D_Sub =(@Bak1_D_E-@Bak1_D_S)
set @num =(select (select count(*) from equipment_WeekData where datediff(d,WeekDate,@ReceiveDate)>=0 and Equipment_type=@Equipment_type
and Number=@Number
))
if(@num>0 )
begin
continue
end
else if(@count>0)
begin
--将数据插入到周数据表
insert into equipment_WeekData(WeekDate,Equipment_type,Number,EngineHour_WD,HoistHour_WD,TrolleryHour_WD,GantryHour_WD,
HTHour_WD,Twistlock_WD,Bak1_H_WD,Bak2_H_WD,Bak3_H_WD,Bak1_D_WD) VALUES( @ReceiveDate,@Equipment_type,@Number,@EngineHour_Sub,@HoistHour_Sub,@TrolleryHour_Sub,
@GantryHour_Sub,@HTHour_Sub,@Twistlock_Sub,@Bak1_H_Sub,@Bak2_H_Sub,@Bak3_H_Sub,@Bak1_D_Sub)
set @num=0
end
if(@@error<>0)
begin
print('rollback tran')
rollback tran
return 0
end
commit tran
--数据库邮件部分
declare @info varchar(100)
if(@count=0)
begin
set @info =(convert(varchar(100),getdate(),120)+'实时数据表中没有上周可用实时数据')
end
else
begin
set @info =(convert(varchar(100),getdate(),120)+'周数据存储过程执行成功')
end
exec msdb.dbo.sp_send_dbmail
@recipients='wangsl@donetech.com.cn',
@subject ='数据库操作提醒',
@body = @info,
@profile_name ='DBEmail_Config';
end
close tempCircleTable_Cursor --关闭游标
deallocate tempCircleTable_Cursor --释放游标
end
GO
/****** Object: StoredProcedure [dbo].[sp_Week] Script Date: 01/28/2010 14:13:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: deepwishly
-- Create date: 2010.1.15
-- Description: 周数据统计
-- =============================================
ALTER procedure [dbo].[sp_Week]
as
begin
--声明变量部分
declare @todayDate datetime
declare @lastWeekStartDate datetime
declare @temp varchar(50) --用于存放游标值的中间变量
declare @num int --记录上周是否有数据,大于零,说明抄表器已经将周数据,发送过来,就不需要计算了
declare @count int --记录临时表中是否有数据
--赋值部分
set @todayDate = (select Convert(varchar(100),GETDATE(),23))
set @lastWeekStartDate = (select DATEADD(day,-7,@todayDate))
--如果存在,删除临时表
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempActualDate') and type='U')
begin
drop table #tempActualDate
end
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempCircleTable') and type='U')
begin
drop table #tempCircleTable
end
--创建二个临时表,
select distinct Number into #tempCircleTable from equipment_ActualData -- 用于游标循环
select * into #tempActualDate from equipment_ActualData --用于操作提供操作的临时表
begin tran
declare tempCircleTable_Cursor cursor for select Number from #tempCircleTable
open tempCircleTable_Cursor
while(@@FETCH_STATUS=0) --返回被fetch语句执行的最后游标的状态
begin
fetch next from tempCircleTable_Cursor into @temp
--如果存在临时表,将其删除
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#temp_WeekTable') and type='U')
begin
drop table #temp_WeekTable
end
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#temp_temp') and type='U')
begin
drop table #temp_temp
end
--创建一个临时表用于存储游标等于@temp的一周数据
select * into #temp_WeekTable from #tempActualDate where Number =@temp
and
datediff(d,ReceiveDate,@lastWeekStartDate)<=0 order by receiveDate asc
select * into #temp_temp from #temp_WeekTable order by receiveDate desc
--记录临时表中是否有数据
set @count = (select count(*) from #temp_WeekTable)
--声明用于存放一周数据起始与结束二条数据变量
--存放起始日期的
declare @ReceiveDate datetime
declare @Equipment_type nvarchar(100)
declare @Number int
declare @EngineHour_S float
declare @HoistHour_S float
declare @TrolleryHour_S float
declare @GantryHour_S float
declare @HTHour_S float
declare @Twistlock_S float
declare @Bak1_H_S float
declare @Bak2_H_S float
declare @Bak3_H_S float
declare @Bak1_D_S float
--声明一周结束日期的
declare @EngineHour_E float
declare @HoistHour_E float
declare @GantryHour_E float
declare @HTHour_E float
declare @TrolleryHour_E float
declare @Twistlock_E float
declare @Bak1_H_E float
declare @Bak2_H_E float
declare @Bak3_H_E float
declare @Bak1_D_E float
--声明插入周数据表中的变量
declare @EngineHour_Sub float
declare @HoistHour_Sub float
declare @TrolleryHour_Sub float
declare @GantryHour_Sub float
declare @HTHour_Sub float
declare @Twistlock_Sub float
declare @Bak1_H_Sub float
declare @Bak2_H_Sub float
declare @Bak3_H_Sub float
declare @Bak1_D_Sub float
--为各变量赋值
set @ReceiveDate =(select top 1 ReceiveDate from #temp_WeekTable )
set @Equipment_type =(select top 1 Equipment_type from #temp_WeekTable )
set @Number =(select top 1 Number from #temp_WeekTable )
set @EngineHour_S =(select top 1 EngineHour from #temp_WeekTable )
set @HoistHour_S =(select top 1 HoistHour from #temp_WeekTable )
set @TrolleryHour_S = (select top 1 TrolleryHour from #temp_WeekTable)
set @GantryHour_S =(select top 1 GantryHour from #temp_WeekTable )
set @HTHour_S =(select top 1 HTHour from #temp_WeekTable )
set @Twistlock_S =(select top 1 Twistlock from #temp_WeekTable )
set @Bak1_H_S =(select top 1 Bak1_H from #temp_WeekTable )
set @Bak2_H_S =(select top 1 Bak2_H from #temp_WeekTable )
set @Bak3_H_S =(select top 1 Bak3_H from #temp_WeekTable )
set @Bak1_D_S =(select top 1 Bak1_D from #temp_WeekTable )
set @EngineHour_E =(select top 1 EngineHour from #temp_temp )
set @HoistHour_E=(select top 1 HoistHour from #temp_temp )
set @TrolleryHour_E = (select top 1 TrolleryHour from #temp_temp)
set @GantryHour_E =(select top 1 GantryHour from #temp_temp )
set @HTHour_E =(select top 1 HTHour from #temp_temp )
set @Twistlock_E =(select top 1 Twistlock from #temp_temp )
set @Bak1_H_E =(select top 1 Bak1_H from #temp_temp )
set @Bak2_H_E =(select top 1 Bak2_H from #temp_temp )
set @Bak3_H_E =(select top 1 Bak3_H from #temp_temp )
set @Bak1_D_E =(select top 1 Bak1_D from #temp_temp )
--整理待插入周数据表数据
set @EngineHour_Sub =(@EngineHour_E-@EngineHour_S)
set @HoistHour_Sub =(@HoistHour_E-@HoistHour_S)
set @TrolleryHour_Sub =(@TrolleryHour_E-@TrolleryHour_S)
set @GantryHour_Sub =(@GantryHour_E-@GantryHour_S)
set @HTHour_Sub =(@HoistHour_E-@HoistHour_S)
set @Twistlock_Sub =(@Twistlock_E-@Twistlock_S)
set @Bak1_H_Sub =(@Bak1_H_E-@Bak1_H_S)
set @Bak2_H_Sub =(@Bak2_H_E-@Bak2_H_S)
set @Bak3_H_Sub =(@Bak3_H_E-@Bak3_H_S)
set @Bak1_D_Sub =(@Bak1_D_E-@Bak1_D_S)
set @num =(select (select count(*) from equipment_WeekData where datediff(d,WeekDate,@ReceiveDate)>=0 and Equipment_type=@Equipment_type
and Number=@Number
))
if(@num>0 )
begin
continue
end
else if(@count>0)
begin
--将数据插入到周数据表
insert into equipment_WeekData(WeekDate,Equipment_type,Number,EngineHour_WD,HoistHour_WD,TrolleryHour_WD,GantryHour_WD,
HTHour_WD,Twistlock_WD,Bak1_H_WD,Bak2_H_WD,Bak3_H_WD,Bak1_D_WD) VALUES( @ReceiveDate,@Equipment_type,@Number,@EngineHour_Sub,@HoistHour_Sub,@TrolleryHour_Sub,
@GantryHour_Sub,@HTHour_Sub,@Twistlock_Sub,@Bak1_H_Sub,@Bak2_H_Sub,@Bak3_H_Sub,@Bak1_D_Sub)
set @num=0
end
if(@@error<>0)
begin
print('rollback tran')
rollback tran
return 0
end
commit tran
--数据库邮件部分
declare @info varchar(100)
if(@count=0)
begin
set @info =(convert(varchar(100),getdate(),120)+'实时数据表中没有上周可用实时数据')
end
else
begin
set @info =(convert(varchar(100),getdate(),120)+'周数据存储过程执行成功')
end
exec msdb.dbo.sp_send_dbmail
@recipients='wangsl@donetech.com.cn',
@subject ='数据库操作提醒',
@body = @info,
@profile_name ='DBEmail_Config';
end
close tempCircleTable_Cursor --关闭游标
deallocate tempCircleTable_Cursor --释放游标
end
相关文章推荐
- mysql存储过程+游标循环遍历 判断 赋值 等实例一
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
- oracle数据库存储过程的一个实例(运用到游标和循环)
- 【MySQL】存储过程、游标、循环简单实例
- 数据库技术_Orcale技术(0002)_5分钟会用存储过程_存储过程简单实例(包含循环、条件、增改查、参数传入、变量赋值、java调用等)
- sql serveri不用游标,适合于循环DML (update delete insert)的场合实例
- mybatis 调用存储过程 返回游标 实例
- Android学习(三)(初学)完整地操作数据库----日记本实例
- java发送邮件完整实例
- oracel游标循环取值实例
- CREATE TABLE AS语句与循环游标的使用实例
- MYSQL存储过程 游标 循环等
- Mysql创建存储过程,使用游标Cursor循环更新
- 数据库的索引、视图、触发器、存储过程、游标等概念的理解
- oracle数据库存储过程范例(使用游标进行循环)
- Java中数据库自动分页完整实例
- 利用游标和存储过程修改数据库的架构归属
- Android Studio 一个完整的APP实例(附源码和数据库)
- Oracle 存储过程中的循环,条件判断,存储过程,游标小结
- PL/SQL 数据库访问的相关技术(2)游标 、异常、存储过程、函数、包、触发器