如果我使用scope_identity();如果多个用户同时使用应用程序,它是否可能返回错误行的值



我是编程界的新手,所以请原谅我的无知。

我想检索刚刚插入的行的主键值。主键值将自动生成。我想把这个主键值作为外键插入到另一个表中。

这是在第一个表 中插入数据的代码
Core.DB.DoQuery("insert into survey(id, title, detail, employerid, userid) values(@id, @title, @detail, @eid, @uid);", 
                Core.DB.SIP("title", surveyTitle.Text), 
                Core.DB.SIP("detail", surveyDetail.Text), 
                Core.DB.SIP("eid", LocalHelper.UserEmployerID()), 
                Core.DB.SIP("uid", LocalHelper.UserID()), 
                Core.DB.SIP("id", survey))

其中DoQuery

Shared Sub DoQuery(ByVal commandText As String, ByVal ParamArray params As SqlParameter())
        Dim conn As SqlConnection = Nothing
        Try
            conn = GetOpenSqlConnection()
            DoQuery(conn, commandText, params)
        Finally
            If conn IsNot Nothing Then conn.Dispose()
        End Try
    End Sub

在上面的代码中,自动生成主键id。我想检索该值以将其作为surveyid插入到第二个表中。

Core.DB.DoQuery("insert into surveyquestioncategory(title, detail, surveyid) values(@title, @detail, @sid)", 
                Core.DB.SIP("title", categoryTitle.Text), 
                Core.DB.SIP("detail", categoryDetail.Text), 
                Core.DB.SIP("sid", Survey.ID))

并且通过检索第二个表的id来插入第三个表的值。

要检索最近插入行的id值,可以使用

Core.DB.DoQuery("SELECT SCOPE_IDENTITY() AS MostRecentID")           

由于这是一个web应用程序,并且几个用户同时使用该应用程序,SCOPE_IDENTITY()可能会返回错误行的值。如果是这样,我该如何避免呢?

请原谅我对编程的无知。

谢谢你的帮助。

谢谢Bashabi

使用OUTPUT语句,您可以在一个查询中完成此操作或为该

创建过程
INSERT INTO survey (id, title, detail, employerid, userid) 
OUTPUT @title, @detail, inserted.ID INTO surveyquestioncategory (title, detail, surveyid)
VALUES (@id, @title, @detail, @eid, @uid);

From MSDN OUTPUT Clause (Transact-SQL)

相关内容

  • 没有找到相关文章

最新更新