asp.net - 使用@@identity检索PK

标签 asp.net sql sql-server tsql identity

我正在使用 ASP.NET 和 SQL Server 构建网站,并且使用

SELECT PK FROM Table WHERE PK = @@identity

我的问题是,使用 @@identity 或使用以下内容来检索多用户网站最后插入的 PK 哪个更好、更可靠:

SELECT MAX(PK) FROM Table WHERE PK = Session ("UserID")

最佳答案

我不确定您到底想要实现什么,但检索连接上最后一个语句的主键值的推荐方法是使用 SCOPE_IDENTITY()

@@Identity 在使用触发器时尤其危险,因为它返回最后生成的标识值,包括由语句中的触发器生成的值。

MSDN有以下几点要说:

SCOPE_IDENTITY and @@IDENTITY return the last identity values that are generated in any table in the current session. However, SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope.

您当然应该使用 SCOPE_IDENTITY() 来支持 MAX(PK) 方法 - 任何数量的 future 可能的更改都可能使该方法无效。

关于asp.net - 使用@@identity检索PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036369/

相关文章:

asp.net - "Add controller"的问题,MVC 4

php - 处理表单是否需要服务器端脚本?

mysql - SQL 从表中选择特定值,但当该表中出现某个元素时则不选择

sql - 将表名作为参数传递

sql - 如何使用 Visual Studio Express 2013 从 sql-server 2008 导入数据到 excel

asp.net - HttpRuntime 缓存的生命周期是多少(任何简单的替代方案?)

c# - 在asp.net中绘制谷歌地图点之间的路径

mysql - 将两列限制为两个字段都必须有数据或两个字段都必须为 NULL

SQL : How to copy one row in a table in new table with multiple columns

c# - 来自 dbml 的 UpdateOnSubmit?