我有一个在Windows Server 2003和SQL Server 2000上运行多年的系统没有问题。最近我将系统移至Windows Server 2008 R2和SQL Server 2008 R2,并开始出现非常奇怪的间歇性问题。SCOPE_IDENTITY回读
我将一行插入到具有标识列的表中,并执行select以检索标识值。大多数情况下,这段代码可以正常工作,但是在随机间隔内,不会返回标识。有时候没有行被找到,因此dr.Read
返回false,其他时候我得到一个行,但是没有标识列。我检查了数据库并且插入成功了,只是没有返回标识。桌子上没有触发器。
我也试图改变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