Как заставить SQL Server 2008 не изменять значение AUTOINC_NEXT, когда IDENTITY_INSERT включен? - PullRequest
2 голосов
/ 14 июня 2010

У меня вопрос по IDENTITY_INSERT. Когда вы изменяете его на ON, SQL Server автоматически меняет значение AUTOINC_NEXT на последнее вставленное значение как идентификатор.

Так что, если вы получили только одну строку с ID = 1 и вставили строку с ID = 100, когда IDENTITY_INSERT включен, то следующая строка вставки будет иметь ID = 101. Мне бы хотелось, чтобы это было 2 без повторного заполнения.

Такое поведение уже существует в SQL Server Compact 3.5. Можно ли заставить SQL Server 2008 не изменять значение AUTOINC_NEXT при выполнении вставки с IDENTITY_INSERT = ON?

Ответы [ 3 ]

1 голос
/ 14 июня 2010

Кроме того, если вы выполняете повторное заполнение и ваш столбец идентификаторов также является первичным ключом, когда вы вернетесь к первоначально вставленному значению, когда для IDENTITY_INSERT указано имя таблицы ON, вы получите нарушение PK.Еще одна вещь для размышления.

1 голос
/ 14 июня 2010

Почему вы хотите это сделать?Во-первых, почти не должно быть случаев, когда вы устанавливаете идентификационную вставку в положение ON в производственной системе.И какая разница, если вы пропустите это?Вы не можете рассчитывать, что идентификаторы не будут пропущены ни в одном событии, поскольку они будут пропущены, если вы выполните откат.

1 голос
/ 14 июня 2010

Я не знаю ни одного способа предотвратить такое поведение - в конце концов, это разумно, во всяком случае!Если вы уже установили значение x (каким бы оно ни было), вы не должны оставлять свое начальное значение ниже x, так как в противном случае вам обязательно придется получить значение в столбце IDENTITY,уже там - не самое подходящее место!

Но если вам нужно, вы можете заново заполнить столбец IDENTITY после того, как вы закончите со своими вставками, используя:может установить любое произвольное значение в качестве нового начального значения (здесь: 300).Конечно, вы должны быть особенно осторожны, чтобы не создавать дубликаты, устанавливая слишком низкое значение повторного заполнения.

...