使用SQL Server 2008 R2,我有一个Users表,我想在其中保留手动输入系统用户的前99个ID值。我已将我的身份种子设置为100,以便在正常行为中为所有新用户提供100+的值。我发现我可以使用SET IDENTITY_INSERT
来抑制标识规范并为此列提供显式值。我需要知道的,并且无法从MSDN中真正理解,如果此抑制仅 应用于正在运行的脚本的上下文。 (即,在网站上创建的新用户,调用正常的插入过程,仍然会被赋予下一个值的自动生成ID> 100)
答案 0 :(得分:6)
SET IDENTITY_INSERT
允许直接插入标识值,它不会要求它。因此,即使它是共享设置,运行“正常”INSERT也会获得自动生成的标识。
也就是说,这也是每个会话的设置,所以你是双重安全的。
至于设计 - 我做过类似的事情,并没有看到它的问题。拥有“众所周知的”标识符是相当普遍的 - 尽管您必须决定100是否是适当的保留块。虽然可能,但你真的不想在以后打开一个不连续的块。在没有保留范围的情况下,过去曾使用负数。