у меня ровно одна идея. завели таблицу с
id int identity(1 , -1)
затем через включенную вставку айдишников добавили две существующих записи
затем с помощью
DBCC CHECKIDENT ('А', RESEED, 4)
в результате после инсертов получим указанную ситуацию.
ну и исправление — перед инсертами выполнить
create table a_save (id int identity(1, 1), name varchar(100))
go
set identity_insert a_save on
insert a_save(id, name)
select id, name from a
set identity_insert a_save off
go
drop table a
go
exec sp_rename 'dbo.a_save', 'a'
go
что-то больше ничего не придумывается... может есть что-то более элегантное?
Здравствуйте, undo75, Вы писали:
U>что-то больше ничего не придумывается... может есть что-то более элегантное?
У меня следущий вариант — @IDENTITY выводит последний сгерерированный IDENTITY вне зависимости от области выполнения.
Значит, нужно сделать 2 таблицы — А и B. Навесить на обе таблицы свои иденити. Затем сделать триггер, чтобы при вставке в таблицу А происходила вставка в таблицу B.
Тогда конструкция:
INSERT A(name) VALUES('xxxx')
PRINT @IDENTITY
Напечает идентити из таблицы B.
Ну а дальше просто подобрать инсерты, чтобы соответствовали выводу и содержимому таблиц.
ЗЫ. Обычно такие задачи задают, чтобы проверить, что человек знает разницу между @@IDENTITY и SCOPE_IDENTITY()