【发布时间】:2014-10-08 00:16:08
【问题描述】:
我一直在网上寻找解决此问题的方法,所有答案似乎都告诉我我这样做是正确的。我继承了这个 Access / SQL Server 数据库,但我似乎无法让这部分工作。
我正在执行一个相当基本的 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()而不是其他任何东西来获取新插入的标识值。 See this blog post for an explanation as to WHY -
我相信你必须加入这两个 SQL 语句 - 它们在不同的上下文中执行,所以第二个语句没有相同的范围。是的,也可以使用
SCOP_IDENTITY()。 -
您应该创建一个插入存储过程并为 SCOPE_IDENTITY 创建一个插入存储过程并包含和 OUTPUT 参数,而不是使用 pass through sql(顺便说一句,这很可能容易受到 sql 注入的攻击)。这使您可以更好地控制正在发生的事情,并且您将拥有参数化查询,而不是执行带有用户输入的字符串。
-
marc_s - 我已阅读该内容,但无法使其正常工作。你有什么代码建议吗?
-
Sean - 这只是一个内部数据库,所以我不太担心安全性(尤其是因为我的用户中有 99% 是计算机文盲。),但我会看看存储过程。
标签: sql-server ms-access identity-column