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
solution :下面是建议的解决方案,我只需将SELECT
添加到现有的SQLSQL语句中,并将.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
发布于 2019-04-17 03:30:19
您的"dbs“连接可能有一些连接池。
在同一个SQL语句中编写SQL INSERT,然后选择identity。最好的解决方案是创建一个存储过程来插入数据,然后返回当前标识。
发布于 2019-04-17 03:21:54
您可以使用OUPTUT
子句,并将insert + select作为单个操作执行:
INSERT INTO MLA(...)
OUTPUT inserted.identity_column_name
VALUES(...)
https://stackoverflow.com/questions/55715245
复制相似问题