对于在场上真正懒惰的人:是否有一个语句可以IDENTITY INSERT sometable
从开启切换到关闭,反之亦然?
1 回答
2
不,没有“toggel identity_insert”声明,并且有充分的理由:
由数据库自动生成的值不应具有任何业务意义。
使用标识列作为代理键,可以帮助您在数据库中保持简单,但是将业务意义归因于数据库为您生成的值是错误的 - 是什么导致人们提出诸如“如何修复差距”之类的问题在我的身份栏中”(我个人最喜欢的答案是Aaron Bertrand的这个)。
事实是,自动生成的值是非常有用的工具,当您只使用它们时,它们被设计为使用 - 并且标识列旨在提供一个简单的行标识符,该标识符按行的顺序递增(或递减)是插入表中。
出于这个原因,set identity_insert
应该只在极少数情况下使用——事实上,除了将数据从一个表复制到另一个表时,当你想准确地保留原始值时——我什至想不出另一种set identity_insert
有用的情况。
结合每个会话只能有一个表处于 identity_insert 状态的事实,您应该能够轻松理解为什么您不想看到toggle identity_insert
充其量是模棱两可的东西。
tl;博士; set identity_insert
鉴于应使用该语句的次数有限,而且它的局限性,有一个toggle identity_insert
语句是一个非常糟糕的主意。
于 2019-09-05T13:00:53.963 回答