[英]within a sql while loop, get id of last inserted row then insert it into a different table, using OUTPUT?
我正在使用sql server 2008编写一些sql,以在某些记录周围循环。 在此循环中,我需要插入一行,并将该行的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吗?
应用了一些性能改进。 使用SCOPE_IDENTITY()更安全
DECLARE @courseTempID INT
DECLARE @courseID INT
DECLARE @academicYearID INT
DECLARE @courseCode VARCHAR(10)
DECLARE @uio_id INT
DECLARE @creatorIntranetUserID INT
DECLARE @id INT
WHILE EXISTS(SELECT 1 FROM CoursesTemp WHERE dmprocessed = 0)
BEGIN
SELECT TOP 1 @id = courseTempID
,@academicYearID = academicYearID
,@courseCode = courseCode
,@uio_id = uio_id
,@creatorIntranetUserID = creatorIntranetUserID
FROM CoursesTemp WHERE dmprocessed = 0
INSERT INTO dbo.Courses VALUES(3,@academicYearID,1,@courseCode,@uio_id,GETDATE(),@creatorIntranetUserID)
UPDATE CoursesTemp SET dmprocessed = 1, courseID = SCOPE_IDENTITY() WHERE courseTempID = @courseTempID
END
OUTPUT
需要介于INSERT INTO dbo.Courses
和VALUES(...)
您也有OUTPUT INSERTED.courseID INTO @CourseId
但是@CourseId是一个int变量,它必须是您要插入的表。
编辑我已经重读了你想做的事情。 而不是使用的OUTPUT
,你可以改变你的最后一行
UPDATE CoursesTemp SET dmprocessed = 1, courseId = SCOPE_IDENTITY()
WHERE courseTempID = @courseTempID
您也许可以使用@@ IDENTITY来获取最后插入的ID值。 http://msdn.microsoft.com/en-us/library/ms187342.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.