`
dr2tr
  • 浏览: 142261 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较

阅读更多

SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。


例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。


假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。


@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。


SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。


而IDENT_CURRENT('T1') 和 IDENT_CURRENT('T2') 返回的值分别是这两个表最后自增的值。

分享到:
评论

相关推荐

    @@IDENTITY与SCOPE_IDENTITY()

    总的来说,理解和正确使用`@@IDENTITY`、`SCOPE_IDENTITY()`以及`IDENT_CURRENT`对于在SQL Server中处理标识列至关重要,它们可以帮助开发者在插入操作后获取正确的自增列值,从而避免数据混乱和潜在的错误。...

    Identity用法

    正确理解和使用 `Identity` 及其相关的函数(如 `@@IDENTITY`、`SCOPE_IDENTITY()` 和 `IDENT_CURRENT()`),可以帮助开发人员更好地管理数据库中的数据。同时,在实际应用中还需注意并发控制、数据迁移和性能优化等...

    sql Identity

    - 如果需要跨表引用`Identity`值,建议使用`SCOPE_IDENTITY()`或者`IDENT_CURRENT()`,以避免不必要的错误。 通过以上介绍可以看出,在处理数据库中的复杂数据关系时,合理运用`Identity`属性及其相关的全局变量...

    对有insert触发器表取IDENTITY值时发现的问题

    `@@IDENTITY`可能返回任何会话和任何作用域中的最后一个标识值,`SCOPE_IDENTITY`仅限于当前作用域,而`IDENT_CURRENT`则不受作用域和会话限制,但需要指定表名。 在进行多表操作时,尤其是在涉及触发器的情况下,...

    使用SQL Server 获取插入记录后的ID(自动编号)

    总结来说,理解并正确使用 `@@IDENTITY`、`SCOPE_IDENTITY()` 和 `IDENT_CURRENT()` 这三个函数对于在SQL Server中处理自增ID至关重要,特别是当数据库设计涉及复杂的触发器和多表操作时。选择合适的函数能够确保你...

    asp中通过addnew添加内容后取得当前文章的自递增ID的方法

    而在.NET框架中,获取自递增ID的方法更加多样,可以使用SCOPE_IDENTITY()、@@IDENTITY、IDENT_CURRENT函数或者OUTPUT参数。每种方法都有其适用场景,选择合适的方法可以帮助开发者有效避免并发和作用域范围的问题。 ...

    sql server经典面试题

    - 使用`SCOPE_IDENTITY()`、`@@IDENTITY`或`IDENT_CURRENT('table_name')`函数,但请注意它们的差异,例如`SCOPE_IDENTITY()`仅返回当前作用域内的最后生成的ID。 9. 通用分页存储过程 - 创建存储过程,接收页码...

    将sqlserver表中指定数据转化为insert语句

    - `IDENT_CURRENT('tableName')`:返回特定表的最后一个自增ID。 3. **使用动态SQL** 要排除自增列并处理非固定数据类型,你可以编写一个存储过程,生成动态的INSERT语句。首先,你需要获取表结构,然后构造...

    sqlserver数据库著名上级面试题目

    - 使用`SCOPE_IDENTITY()`、`IDENT_CURRENT()`或`@@IDENTITY`函数可以获取最近插入的自增字段的值。`SCOPE_IDENTITY()`返回同一事务中最后一个语句生成的标识符,是最安全的选择。 9. **通用分页存储过程** - ...

    asp.net初级面试题2

    4. **自增主键的获取**:Insert后立即使用SCOPE_IDENTITY()、IDENT_CURRENT()或@@IDENTITY获取最新插入的自增主键。 5. **性能分析优化**:使用SQL Server Profiler、Database Engine Tuning Advisor等工具。 **XML...

    MYSQL中获取得最后一条记录的语句

    在其他数据库系统中,如SQL Server,类似的功能有 `SCOPE_IDENTITY()` 和 `IDENT_CURRENT()`。`SCOPE_IDENTITY()` 类似于MySQL的 `LAST_INSERT_ID()`,返回当前会话和事务中的最后一个自增ID,而 `IDENT_CURRENT()` ...

    java获取新insert数据自增id的实现方法

    其实在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的区别和这里是类似的。使用SCOPE_IDENTITY()可以获得插入某个IDENTITY字段的当前会话的值,而使用IDENT_CURRENT()会获得在某个IDENTITY字段上插入的最大值,而不...

    ASP获取新增记录ID值的方法

    1. 使用`IDENT_CURRENT('TBName')`,它返回最后一次对指定表(`TBName`)的任何会话的INSERT操作产生的ID值,不受作用域限制。 2. 使用`@@IDENTITY`,它返回最后一条INSERT语句在任何表中生成的ID值,但可能受到多个...

    技术开发人员招聘笔试题

    在ASP.NET或C#中,可以通过数据库自增列或使用`SCOPE_IDENTITY()`、`IDENT_CURRENT()`等函数来获取刚插入记录的ID。 #### Xhtml的三种DOCTYPE及其意义 - **Strict**:禁止使用表现层标记和属性,如`<font>`。 - **...

Global site tag (gtag.js) - Google Analytics