while
루프를 사용하는 저장 프로 시저가 있습니다. 모든 기록을 읽고 그 결과를 알려줘야합니다. 6 개의 레코드가 반환되었지만 6 번째 레코드의 결과가 6 번 인쇄됩니다.SQL Server 2008 : WHILE 루프가 모든 행을 반복하지 않습니다.
DECLARE @num_month float, @RowCount int, @Init int
--Get count of SubrowID
SET @RowCount = (SELECT COUNT(SubrowID)
FROM tblSubrow
WHERE SubrowID = 13)
SET @Init = 1
--Iterate each SubrowID
WHILE (@Init <= @RowCount)
BEGIN
SELECT
@num_month = SUBSTRING(CAST(DATEDIFF(DAY, s.StartDate, s.EndDate) * CAST(10 AS float)/CAST(30 AS float)/CAST(10 AS float) AS VARCHAR(10)), (CHARINDEX('.', DATEDIFF(DAY, s.StartDate, s.EndDate) * CAST(10 AS float)/CAST(30 AS float)/CAST(10 AS float), 1)), 2)
FROM
tblSubrow
WHERE
SubrowID = '13'
print @num_month
SET @Init = @Init + 1
END
루프 카운터를 쿼리의 어딘가에서 사용한 경우 매번 다른 값이 반환됩니다. 흔히 똑같은 쿼리를 반복해서 실행하면 같은 결과를 얻습니다. while 루프에서도 커서와 간단한 'while'루프가 혼동을 일으킬 수 있습니다. 정말로 이러한 유형의 처리를 원한다면 커서를 사용하는 법을 배워야합니다. –
여기서 루프를하려고합니다. 어떻게 각 행을 식별 할 것인가? –
커서는 사용하지 않는 것이 좋습니다라고 했으므로 while 루프를 사용하려고합니다. tblSubrow 테이블에서 6 startdate와 enddate를 루프해야합니다. 그들은 모두 시작일과 종료일이 다릅니다. – angelcake