I am writing some sql, using sql server 2008, to loop around some records. Within this loop I need to insert a row and the ID of that row will be put into a field in an existing record in a different table. I thought I would be able to achieve this with OUTPUT but I couldn’t find an example of exactly what I wanted to do.
Here’s what I have so far:
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
The error I am getting is “Incorrect syntax near ‘INSERTED'”.
Can anyone help me work out how to use OUTPUT in this way please?
A few performance improvements applied. It is safer to use SCOPE_IDENTITY()