sql-server – 将最后一个标识插入表中的最佳方法
哪一个是获取我刚刚通过插入生成的身份值的最佳选择?这些陈述在绩效方面有何影响?
> SCOPE_IDENTITY() 解决方法如果要插入单行并想要检索生成的ID,请使用SCOPE_IDENTITY().CREATE TABLE #a(identity_column INT IDENTITY(1,1),x CHAR(1)); INSERT #a(x) VALUES('a'); SELECT SCOPE_IDENTITY(); 结果: ---- 1 如果要插入多行并需要检索生成的ID集,请使用OUTPUT子句. INSERT #a(x) OUTPUT inserted.identity_column VALUES('b'),('c'); 结果: ---- 2 3
除了性能之外,这些是唯一在默认隔离级别和/或多个用户中保证正确的.即使您忽略了正确性方面,SQL Server也会将SCOPE_IDENTITY()中的插入值保存在内存中,因此这自然会比针对表或针对系统表运行您自己的独立查询更快. 忽略正确性方面就像告诉邮递员他在今天的邮件中做得很好 – 他比平均时间快10分钟完成他的路线,问题是,没有邮件被送到正确的房子. 请勿使用以下任何一项: > @@ IDENTITY – 因为这不能在所有场景中使用,例如当具有标识列的表具有也插入具有其自己的标识列的另一个表的触发器时 – 您将得到错误的值. 每当插入两行或更多行时,这些函数也会失败,并且需要生成所有标识值 – 您唯一的选择是OUTPUT子句. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |