MSSQL небольшой этюд
От: undo75  
Дата: 25.11.21 10:13
Оценка: 11 (2)
у меня ровно одна идея. завели таблицу с
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


что-то больше ничего не придумывается... может есть что-то более элегантное?

Re: MSSQL небольшой этюд
От: Джеффри  
Дата: 25.11.21 13:22
Оценка: 4 (1) +3
Здравствуйте, undo75, Вы писали:

U>что-то больше ничего не придумывается... может есть что-то более элегантное?


У меня следущий вариант — @IDENTITY выводит последний сгерерированный IDENTITY вне зависимости от области выполнения.

Значит, нужно сделать 2 таблицы — А и B. Навесить на обе таблицы свои иденити. Затем сделать триггер, чтобы при вставке в таблицу А происходила вставка в таблицу B.

Тогда конструкция:

INSERT A(name) VALUES('xxxx')
PRINT @IDENTITY


Напечает идентити из таблицы B.

Ну а дальше просто подобрать инсерты, чтобы соответствовали выводу и содержимому таблиц.

ЗЫ. Обычно такие задачи задают, чтобы проверить, что человек знает разницу между @@IDENTITY и SCOPE_IDENTITY()
Отредактировано 25.11.2021 13:25 Джеффри . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.