第一次写的存储过程

USE [hr]
GO
/****** Object:  StoredProcedure [dbo].[Search_nosuit]    Script Date: 06/26/2012 12:25:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Search_nosuit]
	-- Add the parameters for the stored procedure here
	
AS
declare	@Problem bit,@RoleUtime time,@RoleBtime time,@Record_Time time,@Record_id int
	
Declare StaRole cursor for
select RoleUtime,RoleBtime From RoleTable

declare AttRecord Cursor for
Select Record_id,Record_Time From HR_Record 
open AttRecord
fetch next from AttRecord into @Record_id,@Record_Time
While @@FETCH_STATUS=0
BEGIN
	Set @Problem=1
	open StaRole
	fetch next from StaRole into @RoleUtime,@RoleBtime
	While @@FETCH_STATUS=0	
	Begin
		if @Record_time>@RoleUtime and @Record_Time<@RoleBtime
			Set @problem=0
	end
	close staRole
	if @Problem=1 
	begin
		insert into ProblemTable  (record_id) values (@Record_id)
		update HR_Record set Action=1 Where Record_id=@Record_id
	end    
END
close AttRecord

运行出错感觉进入了死循环,参考资料后发现确实是死循环中。

修改后的过程:

USE [hr]
GO
/****** Object:  StoredProcedure [dbo].[Search_nosuit]    Script Date: 06/26/2012 14:09:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Search_nosuit]
	-- Add the parameters for the stored procedure here
	
AS
declare	@Problem bit,@RoleUtime time,@RoleBtime time,@Record_Time time,@Record_id int
	
Declare StaRole cursor for
select RoleUtime,RoleBtime From RoleTable

declare AttRecord Cursor for
Select Record_id,Record_Time From HR_Record 
open AttRecord
fetch next from AttRecord into @Record_id,@Record_Time
While @@FETCH_STATUS=0
BEGIN
	Set @Problem=1
	open StaRole
	fetch next from StaRole into @RoleUtime,@RoleBtime
	While @@FETCH_STATUS=0	
	Begin
		if @Record_time>@RoleUtime and @Record_Time<@RoleBtime
			Set @problem=0
		fetch next from starole into @RoleUtime,@RoleBtime
	end
	close staRole
	
	if @Problem=1 
	begin
		insert into ProblemTable  (record_id) values (@Record_id)		
	end    
	update HR_Record set Action=1 Where Record_id=@Record_id
	fetch next from AttRecord into @Record_id,@Record_Time
END
close AttRecord
deallocate starole
deallocate AttRecord


OK ,完成了。

再改:

[sql]  view plain copy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值