Как автоматически пересеять после использования identity_insert?

Я недавно мигрировал от базы данных PostgreSQL до базы данных SQL Server. Для переключения данных, я должен был включить IDENTITY_INSERT. Хорошо приезжайте, чтобы узнать, что я получаю все виды странных ошибок, должных копировать значения идентификационных данных (которые установлены как первичные ключи) после выполнения вставки в любой из таблиц.

У меня есть довольно много таблиц. Что было бы самым легким способом автоматического пересева идентификационных данных каждой таблицы так, чтобы это было после max(RID)?

18
задан Earlz 27 May 2010 в 18:35
поделиться

1 ответ

Используйте информацию из по этой ссылке в сочетании с функцией SQL, которая получает максимальное значение (RID) из каждой таблицы, которую необходимо сбросить. Например, если вы хотите начать начальное значение первичного ключа с 25000, используйте приведенный ниже код (StartSeedValue - 1)

DBCC CHECKIDENT('myTable', RESEED, 24999)

Таким образом, в комбинации вы должны получить что-то вроде этого

DECLARE @maxVal INT
SELECT @maxVal = ISNULL(max(ID),0)+1 from mytable
DBCC CHECKIDENT('mytable', RESEED, @maxVal)

Извините за псевдокод, был некоторое время с тех пор, как я написал функцию SQL :)

EDIT:

Спасибо за уловку, изменил INTEGER на INT

USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO 

Это даст вам список всех пользовательских таблиц в базе данных. Используйте этот запрос как свой «цикл», и он должен позволить сбросить начальные значения во всех таблицах.

29
ответ дан 30 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: