我一直在网络上寻找解决方法,所有的答案似乎告诉我,我正确地做到了这一点。我已经继承了这个Access/SQL Server数据库,而且我似乎无法让这一块工作。@@ Identity从Access前端返回0(SQL Server Express后端)
我正在执行相当基本的SQL INSERT
正常工作的查询。我已经检查了好几次。一旦执行查询,我试图从身份值中取回身份值以用于我的其他代码。
这里是我的代码:
db.Execute (SQLStr)
Set rs = db.OpenRecordset("SELECT @@IDENTITY")
InNo = rs(0)
Debug.Print InNo
rs.Close
db.Close
这始终返回InNo
值为0。我尝试了几种不同的方法,但我似乎无法得到这个工作。
我也直接从SQL Server中使用这种方法,查询@@Identity
工作正常。
在此先感谢。
我会推荐使用** SCOPE_IDENTITY()**而不是其他任何东西来抓取新插入的标识值。 [请参阅此博客文章,了解有关WHY的解释](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity -of-record /) – 2014-10-07 16:04:26
我相信你必须加入两条SQL语句 - 它们在不同的上下文中执行,所以第二条语句的范围并不相同。是的,也使用'SCOP_IDENTITY()'。 – Luaan 2014-10-07 16:07:18
您应该创建一个插入存储过程,并为SCOPE_IDENTITY创建一个包含和OUTPUT参数,而不是使用传递sql(btw很可能容易受到sql注入攻击)。这使您可以更好地控制发生的事情,并且您将拥有参数化查询,而不是使用用户输入执行字符串。 – 2014-10-07 16:10:03