gpt4 book ai didi

sql-server-2008-r2 - SCOPE_IDENTITY 回读

转载 作者:行者123 更新时间:2023-12-03 23:41:17 25 4
gpt4 key购买 nike

我的系统已在 Windows Server 2003 和 SQL Server 2000 上运行多年,没有出现任何问题。最近我将系统移动到 Windows Server 2008 R2 和 SQL Server 2008 R2 并开始出现非常奇怪的间歇性问题。

我将一行插入到一个带有标识列的表中,并执行选择以检索标识值。大多数情况下,这段代码工作正常,但在随机时间间隔内不会返回身份。有时找不到行,所以 dr.Read 返回 false,有时我得到一行,但其中没有标识列。我查看了数据库,插入成功了,只是没有返回身份。 table 上没有触发器。

我还尝试将 SQL 更改为:

INSERT INTO test (value) 
VALUES (100)
SELECT SCOPE_IDENTITY() AS 'identity' OPTION (MAXDOP 1)

以防我遇到 'max degree of parallelism'错误,但这也没有帮助。

这里是相关代码(为便于说明略有简化):

Dim dr As SqlDataReader = Nothing
Dim objCommand As New SqlCommand
Dim oConn As New SqlConnection
Dim id as integer

oConn.ConnectionString = connStr
oConn.open()

objCommand = New SqlCommand("INSERT INTO test (value) VALUES (100) SELECT SCOPE_IDENTITY() AS 'identity'", oConn, tr)

try
dr = objCommand.ExecuteReader
If Not dr.Read Then
Throw (New Exception("Could not read IDENTITY"))
Else
id = dr("identity")
End If
Catch
Throw
Finally
If Not dr Is Nothing Then dr.Close()
oConn.close()
End Try

最佳答案

如果您只是将它们作为两个单独的语句来执行会怎样?

objCommand = New SqlCommand("INSERT INTO test (value) VALUES (100); SELECT SCOPE_IDENTITY() AS 'identity'", oConn, tr)

SCOPE_IDENTITY为您提供“在同一范围内插入标识列的最后一个标识值。”

关于sql-server-2008-r2 - SCOPE_IDENTITY 回读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com