2
필자는 종종 전문가 수준의 사용자가 데이터베이스 수준에서 루프를 피하는 것이 좋습니다 (참조 here). 루프의 사용없이 작업을 수행하는 다른 방법을 볼 수없는 짧은 코드 블록이 있습니다. 작업은 매우 간단하지만 루프를 피할 수있는 방법이 있습니까? 코드의SQL Server 2008 R2에서이 루프를 피할 수있는 방법이 있습니까?
DECLARE @id INT = 1
DECLARE @auxId INT
WHILE @id IS NOT NULL
BEGIN
SET @auxId = @id
SELECT @id = id_next_version FROM task WHERE id_task = @id
END
SELECT @aux
설명 :
나는이 작업을하고 일부 행은 다른 작업의 업데이트입니다 테이블이, 그래서 다음 버전의 ID입니다 열 수 있습니다. 내가 원하는 것은 작업의 마지막 버전 인 id
을 찾는 것입니다.
편집 :
표 구조
CREATE TABLE task
(
id_task INT IDENTITY(1,1) NOT NULL,
task NVARCHAR(50) NULL,
id_next_version INT NULL
)
방금 코드를 실행했지만 아무 것도 반환하지 않습니다. 어떤 힌트? – smartdan
@DanielGonzalez. . . SQL Fiddle과 SQL Server의 로컬 인스턴스에 대한 예제 데이터에서 모두 작동합니다. –
내 경험상 이것은 훨씬 더 빠른 이오타 일 수 있습니다. 이것은 기본적으로 루프를 루프 조인으로 이동합니다. 그 루프의 훨씬 더 단단한 몸. – usr