首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SCOPE_IDENTITY、@@IDENTITY和IDENT_CURRENT返回null

SCOPE_IDENTITY、@@IDENTITY和IDENT_CURRENT返回null
EN

Stack Overflow用户
提问于 2019-04-17 03:19:40
回答 2查看 96关注 0票数 1

dbo、完全权限、本地SQL Server Express数据库、我创建和拥有的表。

我刚刚在MLA中插入了一行,如果我执行SELECT * FROM MLA,我会得到我刚刚插入的行……

代码语言:javascript
复制
19 2019-04-16 15:02:52.000 Test

"19“是关键字,它是一个标识列。所以我试着用这些东西拿到钥匙...

代码语言:javascript
复制
SELECT SCOPE_IDENTITY()
SELECT IDENT_CURRENT('MLA')
SELECT @@IDENTITY

并且它们都返回NULL。

插入行的代码是这样的:

代码语言:javascript
复制
DbS.Execute(SQL)

其中,DbS是到服务器的活动的工作连接,该服务器也用于插入。然后,我尝试使用以下代码检索密钥:

代码语言:javascript
复制
Dim DT as RecordSet
DT = DbS.Open("SELECT IDENT_CURRENT('USAA_ArgusVal_MLA')")

我可以想象,Open创建了一个新的作用域,这将无法解释@@IDENTITY

solution :下面是建议的解决方案,我只需将SELECT添加到现有的SQLSQL语句中,并将.Execute更改为使用以下代码

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-17 03:30:19

您的"dbs“连接可能有一些连接池。

在同一个SQL语句中编写SQL INSERT,然后选择identity。最好的解决方案是创建一个存储过程来插入数据,然后返回当前标识。

票数 1
EN

Stack Overflow用户

发布于 2019-04-17 03:21:54

您可以使用OUPTUT子句,并将insert + select作为单个操作执行:

代码语言:javascript
复制
INSERT INTO MLA(...)
OUTPUT inserted.identity_column_name
VALUES(...)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55715245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档