替代sql循环 [英] Alternative to sql loop

查看:66
本文介绍了替代sql循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我被要求使用循环替换sql中游标的功能。

这是我用来代替使用循环替换游标的代码。

  DECLARE  
< span class =code-sdkkeyword> @ Cyber​​_ExpectedFPD AS 日期时间
@ MEsPassed AS Int
@ i AS Int
@ The_Date AS 日期时间
@start int
@结束 int ;

SELECT @ start = ISNULL(MIN(ContractNo), 0 ), @ end = ISNULL(MAX(ContractNo), 0 FROM Cyber​​trac_FirstHooks_E;

@ start < = @end
BEGIN
IF EXISTS SELECT 1 FROM Cyber​​trac_FirstHooks_E WHERE Contract_No = @ start
BEGIN
SELECT @ Cyber​​_ExpectedFPD = CONVERT 日期时间 LEFT (Cyber​​_ExpectedFPD, 11 ), 103
FROM Cyber​​trac_FirstHooks_E
WHERE Contract_No = @ start ;

SELECT @ MEsPassed = ISNULL(DATEDIFF(m, @ Cyber​​_ExpectedFPD ,Monthend_Proc_Date ), 0 FROM creditease.dbo.tblSetup_Variables;
IF @ MEsPassed > 3 SET @ MEsPassed = 3 ;
SET @ i = 1 ;

WHILE @ i < = @MEsPassed
BEGIN
SET @ The_Date = DATEADD(d, - 1 ,DATEADD(m, @ i ,DATEADD(d, - DAY( @ Cyber​​_ExpectedFPD )+ 1 @ Cyber​​_ExpectedFPD )))
INSERT INTO Cyber​​trac_FirstHooks_H (Contract_No,Period,AsAtDate)
VALUES @ start @ i @ The_Date

SET @ i = @ i + 1 ;
END
END
SET @ start = @ start + 1 ;
END





我想知道是否有循环或游标甚至是必要的。我已经阅读了一些关于使用set操作的内容,但不知道是否可以使用它。

提前感谢你。

解决方案

< blockquote>参考



1. 在SQL Server 2008中比较游标与WHILE循环性能 [ ^ ]

2. CURSOR vs WHILE LOOP(SQL SERVER) [ ^ ]


Hi All,

I have been asked to use a loop to replace the functionality of a cursor in sql.
This is the code I have come up with to replace the cursor using loops.

DECLARE
@Cyber_ExpectedFPD AS Datetime,
@MEsPassed AS Int,
@i AS Int,
@The_Date AS Datetime,
@start int,
@end int;

SELECT @start = ISNULL(MIN(ContractNo),0), @end = ISNULL(MAX(ContractNo),0) FROM Cybertrac_FirstHooks_E;

while @start <= @end
	BEGIN
		IF EXISTS(SELECT 1 FROM Cybertrac_FirstHooks_E WHERE Contract_No = @start)
			BEGIN
				SELECT @Cyber_ExpectedFPD = CONVERT(Datetime,LEFT(Cyber_ExpectedFPD,11),103)
				FROM Cybertrac_FirstHooks_E
				WHERE Contract_No = @start;

				SELECT @MEsPassed=ISNULL(DATEDIFF(m,@Cyber_ExpectedFPD,Monthend_Proc_Date),0) FROM creditease.dbo.tblSetup_Variables;
				IF @MEsPassed >3 SET @MEsPassed = 3;
				SET @i = 1;

				WHILE @i <= @MEsPassed
					BEGIN
						SET @The_Date = DATEADD(d, - 1, DATEADD(m, @i, DATEADD(d, - DAY(@Cyber_ExpectedFPD) + 1, @Cyber_ExpectedFPD)))
						INSERT INTO Cybertrac_FirstHooks_H (Contract_No, Period, AsAtDate)
						VALUES (@start,@i, @The_Date)

					SET @i = @i + 1;
					END
			END
	SET @start = @start + 1;
	END



I was wondering if a loop or cursor is even necessary fro this. I have read something about using set operations instead, but do not know if it can be done with this.
Thanking you in advance.

解决方案

Refer

1. Comparing cursor vs. WHILE loop performance in SQL Server 2008[^]
2. CURSOR v.s. WHILE LOOP (SQL SERVER)[^]


这篇关于替代sql循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆