dbo,完全权限,本地SQL Server Express数据库,我创建和拥有的表。
我刚刚在MLA
中插入了一行,如果执行了SELECT * FROM MLA
,我得到了我刚刚插入的行...
19 2019-04-16 15:02:52.000 Test
“ 19”是密钥,它是一个标识列。因此,我尝试通过任何一种方式获取该钥匙...
SELECT SCOPE_IDENTITY()
SELECT IDENT_CURRENT('MLA')
SELECT @@IDENTITY
它们都返回NULL。
该行插入了以下代码行:
DbS.Execute(SQL)
其中DbS是到服务器的活动工作连接,该服务器也用于插入。然后,我尝试使用以下代码检索密钥:
Dim DT as RecordSet
DT = DbS.Open("SELECT IDENT_CURRENT('USAA_ArgusVal_MLA')")
我可以想象Open创造了一个新的范围,无法解释@@IDENTITY
UPDATE :这是下面建议的解决方案,我只是将SELECT
添加到现有的INSERT
SQL语句中,并将.Execute
更改为使用此代码
SQL &= vbCrLf & "SELECT SCOPE_IDENTITY() AS MLAKey"
Dim DI As RecordSet = DbS.Open(SQL)
If DI.Read Then
MLAKey = DI!MLAKey
Else
MLAKey = ""
End If
答案 0 :(得分:2)
您可以使用OUPTUT
子句并执行insert + select作为单个操作:
INSERT INTO MLA(...)
OUTPUT inserted.identity_column_name
VALUES(...)
答案 1 :(得分:1)
您的“ dbs”连接可能具有一些连接池。
在同一SQL语句中编写SQL INSERT,然后选择SELECT身份。 最好的解决方案是创建一个存储过程,以插入数据,然后返回当前身份。