我知道Scope_Identity()Identity()@@IdentityIdent_Current()都得到了标识列的值,但我很想知道它们之间的区别.

我所面临的部分争议是,适用于上述功能的范围是什么意思?

我也想举一个简单的例子,说明使用它们的不同场景?

推荐答案

  • @@identity函数返回在同一会话中创建的最后一个标识.
  • scope_identity()函数返回在同一会话和同一作用域中创建的最后一个标识.
  • ident_current(name)返回在任何会话中为特定表或视图创建的最后一个标识.
  • identity()函数不用于获取标识,而是用于在select...into查询中创建标识.

会话是数据库连接.作用域是当前查询或当前存储过程.

scope_identity()@@identity函数不同的一种情况是,如果你的桌子上有一个触发器.如果查询插入了一条记录,导致触发器在某处插入另一条记录,scope_identity()函数将返回查询创建的标识,而@@identity函数将返回触发器创建的标识.

所以,通常你会使用scope_identity()函数.

Sql相关问答推荐

需要解决办法通过传递过程参数而不是声明表行类型来声明表类型

使用group by后我的平均输出不是我想要的

如何在SQL查询中只比较日期时间的年份和月份(而忽略日期比较)?

基于模式或其他行集的数据复制

如何通过比较不同表中相同ID S的值来筛选ID为S的列表?

删除MariaDB数据库中的JSON数据

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

对非RUST源代码字符串使用`stringify!`,例如SQL查询

如何更新SQLite数据库中的表?

缺少日期标识

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

如果另一个表中不存在值列,则插入失败

基于开始/结束日期重叠的BigQuery突发行

将时间范围划分为全天和前后剩余小时

如何在MS Access中基于另外两个表自动填充一个表中的字段?

PostgreSQL-用第一个非空填充以前的值

复制SQL Server临时表

PostgreSQL如何将Unix纪元时间戳转换为日期时间并进行拼接

snowfalke 会在 Select 运行时锁定表吗?