如果我使用 scope_identity() ;如果多个用户同时使用该应用程序,它是否可能 return 错误行的值
If I use scope_identity() ; is it possible that it can return the value of a wrong row if several users are using the application at the same time
本人是编程新手,请见谅
我想检索刚插入的行的主键值。主键值是自动生成的。我想将该主键值作为外键插入到另一个 table 中。
这是在第一个中插入数据的代码table
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
插入到第二个 table 中。
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))
并通过检索第 2 个 table 的 ID 来插入第 3 个 table 的值。
要检索最近插入的行的 id 值,我们可以使用
Core.DB.DoQuery("SELECT SCOPE_IDENTITY() AS MostRecentID")
由于这是一个 Web 应用程序,多个用户同时使用该应用程序,因此 SCOPE_IDENTITY()
可能会 return 错误行的值。如果是这样,我该如何避免?
请原谅我对编程的无知。
感谢您的帮助。
谢谢
巴沙比
使用 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);
来自 MSDN OUTPUT Clause (Transact-SQL)
本人是编程新手,请见谅
我想检索刚插入的行的主键值。主键值是自动生成的。我想将该主键值作为外键插入到另一个 table 中。
这是在第一个中插入数据的代码table
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
插入到第二个 table 中。
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))
并通过检索第 2 个 table 的 ID 来插入第 3 个 table 的值。
要检索最近插入的行的 id 值,我们可以使用
Core.DB.DoQuery("SELECT SCOPE_IDENTITY() AS MostRecentID")
由于这是一个 Web 应用程序,多个用户同时使用该应用程序,因此 SCOPE_IDENTITY()
可能会 return 错误行的值。如果是这样,我该如何避免?
请原谅我对编程的无知。
感谢您的帮助。
谢谢 巴沙比
使用 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);
来自 MSDN OUTPUT Clause (Transact-SQL)