sql server 遊標的簡單用法

USE [stureg]
GO
/****** Object:  StoredProcedure [dbo].[proc_tel_rule]    Script Date: 05/24/2012 14:38:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Create date: 2012-5-24
-- Description:	批量修改電話號碼類型
-- =============================================
ALTER PROCEDURE [dbo].[proc_tel_rule] 
	-- Add the parameters for the stored procedure here
	--@tel_no varchar(20) --out, --輸出參數
AS
BEGIN
	DECLARE @count int -- 計數
	------------- 定義遊標1,三連號AAA或者以上(AAAA、AAAAA),第四位起的任意位置 ---------------
	declare @tel_no_1 varchar(20)
	declare tel_no_list_1 cursor for 
	select tel_no from
	(select tel_no,A = right(left(tel_no,4),1),B = right(left(tel_no,5),1),C = right(left(tel_no,6),1),D = right(left(tel_no,7),1),
	E = right(left(tel_no,8),1),F = right(left(tel_no,9),1),G = right(left(tel_no,10),1),H = right(left(tel_no,11),1)  
	from stureg.dbo.t_tel_info) TMP
	where (TMP.A = TMP.B AND TMP.A = TMP.C AND TMP.B = TMP.C) 
	OR (TMP.B = TMP.C AND TMP.B = TMP.D AND TMP.C = TMP.D)
	OR (TMP.C = TMP.D AND TMP.C = TMP.E AND TMP.D = TMP.E)
	OR (TMP.D = TMP.E AND TMP.D = TMP.F AND TMP.E = TMP.F)
	OR (TMP.E = TMP.F AND TMP.E = TMP.G AND TMP.F = TMP.G)
	OR (TMP.F = TMP.G AND TMP.F = TMP.H AND TMP.G = TMP.H)
	
	Open tel_no_list_1 -- 打開遊標
    fetch next from tel_no_list_1 into @tel_no_1 -- 賦值
    SET @count = 0
    print '三連號AAA或者以上(AAAA、AAAAA),第四位起的任意位置'
    While (@@fetch_status<>-1)
		Begin
			fetch next from tel_no_list_1 into @tel_no_1
			print @tel_no_1
			-- 更新數據庫
			UPDATE [stureg].[dbo].[t_tel_info] SET [aaa] = 1 WHERE tel_no = @tel_no_1
			set @count = @count + 1
		end
	print '總數:'  
	print @count 
	close tel_no_list_1; -- 關閉遊標
	DEALLOCATE tel_no_list_1; -- 刪除遊標 
	
	------------ AABB,第四位起任意位置 -----------------------
	declare @tel_no_2 varchar(20)
	declare tel_no_list_2 cursor for 
	select tel_no from
	(select tel_no,A = right(left(tel_no,4),1),B = right(left(tel_no,5),1),C = right(left(tel_no,6),1),D = right(left(tel_no,7),1),
	E = right(left(tel_no,8),1),F = right(left(tel_no,9),1),G = right(left(tel_no,10),1),H = right(left(tel_no,11),1)  
	from stureg.dbo.t_tel_info) TMP
	where (TMP.A = TMP.B AND TMP.C = TMP.D AND TMP.B != TMP.C) 
	OR (TMP.B = TMP.C AND TMP.D = TMP.E AND TMP.C != TMP.D)
	OR (TMP.C = TMP.D AND TMP.E = TMP.F AND TMP.D != TMP.E)
	OR (TMP.D = TMP.E AND TMP.F = TMP.G AND TMP.E != TMP.F)
	OR (TMP.E = TMP.F AND TMP.G = TMP.H AND TMP.F != TMP.G)
	
	Open tel_no_list_2 -- 打開遊標
    fetch next from tel_no_list_2 into @tel_no_2 -- 賦值
    SET @count = 0
    print 'AABB,第四位起任意位置'
    While (@@fetch_status<>-1)
		Begin
			fetch next from tel_no_list_2 into @tel_no_2
			print @tel_no_2
			-- 更新數據庫
			UPDATE [stureg].[dbo].[t_tel_info] SET [aabb] = 1 WHERE tel_no = @tel_no_2
			set @count = @count + 1
		end
	print '總數:'  
	print @count 
	close tel_no_list_2; -- 關閉遊標
	DEALLOCATE tel_no_list_2; -- 刪除遊標 
	
	------------ ABCD(ABCDE、ABCDEF)或以上,第四位起任意位置 ------
	declare @tel_no_3 varchar(20)
	declare tel_no_list_3 cursor for
	select tel_no from
	(select tel_no,A = right(left(tel_no,4),1),B = right(left(tel_no,5),1),C = right(left(tel_no,6),1),D = right(left(tel_no,7),1),
	E = right(left(tel_no,8),1),F = right(left(tel_no,9),1),G = right(left(tel_no,10),1),H = right(left(tel_no,11),1)  
	from stureg.dbo.t_tel_info) TMP
	where (TMP.A+1 = TMP.B AND TMP.B+1 = TMP.C AND TMP.C+1 = TMP.D)
	OR (TMP.B+1 = TMP.C AND TMP.C+1 = TMP.D AND TMP.D+1 = TMP.E)
	OR (TMP.C+1 = TMP.D AND TMP.D+1 = TMP.E AND TMP.E+1 = TMP.F)
	OR (TMP.D+1 = TMP.E AND TMP.E+1 = TMP.F AND TMP.F+1 = TMP.G)
	OR (TMP.E+1 = TMP.F AND TMP.F+1 = TMP.G AND TMP.G+1 = TMP.H)
	
	Open tel_no_list_3 -- 打開遊標
    fetch next from tel_no_list_3 into @tel_no_3 -- 賦值
    SET @count = 0
    print 'ABCD(ABCDE、ABCDEF)或以上,第四位起任意位置'
    While (@@fetch_status<>-1)
		Begin
			fetch next from tel_no_list_3 into @tel_no_3
			print @tel_no_3
			-- 更新數據庫
			UPDATE [stureg].[dbo].[t_tel_info] SET [abcd] = 1 WHERE tel_no = @tel_no_3
			set @count = @count + 1
		end
	print '總數:'  
	print @count 
	close tel_no_list_3; -- 關閉遊標
	DEALLOCATE tel_no_list_3; -- 刪除遊標 
	
	------------ DCBA或以上,第四位起任意位置 --------
	declare @tel_no_4 varchar(20)
	declare tel_no_list_4 cursor for
	select tel_no from
	(select tel_no,A = right(left(tel_no,4),1),B = right(left(tel_no,5),1),C = right(left(tel_no,6),1),D = right(left(tel_no,7),1),
	E = right(left(tel_no,8),1),F = right(left(tel_no,9),1),G = right(left(tel_no,10),1),H = right(left(tel_no,11),1)  
	from stureg.dbo.t_tel_info) TMP
	where (TMP.A-1 = TMP.B AND TMP.B-1 = TMP.C AND TMP.C-1 = TMP.D)
	OR (TMP.B-1 = TMP.C AND TMP.C-1 = TMP.D AND TMP.D-1 = TMP.E)
	OR (TMP.C-1 = TMP.D AND TMP.D-1 = TMP.E AND TMP.E-1 = TMP.F)
	OR (TMP.D-1 = TMP.E AND TMP.E-1 = TMP.F AND TMP.F-1 = TMP.G)
	OR (TMP.E-1 = TMP.F AND TMP.F-1 = TMP.G AND TMP.G-1 = TMP.H)
	
	Open tel_no_list_4 -- 打開遊標
    fetch next from tel_no_list_4 into @tel_no_4 -- 賦值
    SET @count = 0
    print 'ABCD(ABCDE、ABCDEF)或以上,第四位起任意位置'
    While (@@fetch_status<>-1)
		Begin
			fetch next from tel_no_list_4 into @tel_no_4
			print @tel_no_4
			-- 更新數據庫
			UPDATE [stureg].[dbo].[t_tel_info] SET [dcba] = 1 WHERE tel_no = @tel_no_4
			set @count = @count + 1
		end
	print '總數:'  
	print @count 
	close tel_no_list_4; -- 關閉遊標
	DEALLOCATE tel_no_list_4; -- 刪除遊標 
	
END 

發佈了23 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章