繁体   English   中英

在sql while循环中,获取最后插入的行的ID,然后使用OUTPUT将其插入到另一个表中?

[英]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.CoursesVALUES(...)您也有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM