SQL Server 2008을 사용하여 일부 레코드를 루프하는 일부 SQL을 작성했습니다. 이 루프 내에서 행을 삽입해야하며 해당 행의 ID는 다른 테이블의 기존 레코드 필드에 삽입됩니다. OUTPUT으로이 작업을 수행 할 수있을 것이라고 생각했지만 정확히하고 싶었던 예제를 찾을 수 없었습니다.sql while 루프 내에 마지막 삽입 된 행의 ID를 가져온 다음 OUTPUT을 사용하여 다른 테이블에 삽입 하시겠습니까?
이DECLARE @courseTempID INT
DECLARE @courseID INT
DECLARE @academicYearID INT
DECLARE @courseCode VARCHAR(10)
DECLARE @uio_id INT
DECLARE @creatorIntranetUserID INT
WHILE (SELECT count(*) FROM CoursesTemp WHERE dmprocessed = 0) > 0
BEGIN
SELECT TOP 1 @id = courseTempID FROM CoursesTemp WHERE dmprocessed = 0
SELECT TOP 1 @academicYearID = academicYearID FROM CoursesTemp WHERE dmprocessed = 0
SELECT TOP 1 @courseCode = courseCode FROM CoursesTemp WHERE dmprocessed = 0
SELECT TOP 1 @uio_id = uio_id FROM CoursesTemp WHERE dmprocessed = 0
SELECT TOP 1 @creatorIntranetUserID = creatorIntranetUserID FROM CoursesTemp WHERE dmprocessed = 0
INSERT INTO dbo.Courses VALUES(3,@academicYearID,1,@courseCode,@uio_id,GETDATE(),@creatorIntranetUserID)
OUTPUT INSERTED.courseID INTO @courseID
UPDATE CoursesTemp SET dmprocessed = 1, courseID = @courseID WHERE courseTempID = @courseTempID
END
내가 점점 오전 오류는 " 'INSERTED'근처의 구문이 잘못되었습니다"입니다 :
는 여기에 지금까지 무슨이다.
누구든지 OUTPUT 사용 방법을 알아낼 수 있습니까?
이 올바른 해결책이 아니라 작은 오류가, 당신이 변수"@id "를 선언해야합니다라는 오류 메시지와 함께 실패 할 것, 사용하는 것이 안전합니다 @courseTempID. " – GarethD
@ GarthD : 맞습니다. 원래 쿼리에서 올바르게 수행되었다고 가정하고 변수 선언에주의를 기울이지 않았습니다. – Tomek
@Tomek 완벽하게 작동합니다. 이 방법으로 SCOPE_IDENTITY()를 사용할 수 있는지 몰랐다. 변수에 할당 된 INSERT 문 끝 부분에 있어야한다고 생각했다. 고마워, 미래의 프로젝트를 알면 정말 유용 할 것이다. – Laura