INSERT с автоинкрементом, не работающим в SQL Server (с репликацией БД?) - PullRequest
0 голосов
/ 13 октября 2019

После удаления строк, но после получения 60 существующих строк по локальной подписке для репликации из другого экземпляра SQL Server, я вставляю новые строки с:

INSERT INTO [Business].[dbo].[ImagesTable] (Filename, Title, Price, PriceString, Category, CategoryRank) 
VALUES ('vegan1.jpg', 'vegan1', 380000, '380,000', 'delices vegan', 0)

Но это не удастся, так как ID будет начинаться где-то (9 в данном случае), вместо того, чтобы начинаться с последнего идентификатора, используемого +1, т. Е. 61 в моем случае.

System.Data.SqlClient.SqlException: 'Нарушение ограничения PRIMARY KEY 'PK_ImagesTable'. Невозможно вставить дубликат ключа в объект 'dbo.ImagesTable'. Значение ключа-дубликата равно (9).

Моя таблица настроена на автоинкремент, поэтому мне не следует использовать явный IDENT_CURRENT('ImagesTable'). Почему это происходит?

Кроме того, несмотря на это, когда я пытаюсь явно вставить идентификатор, у меня есть:

Невозможно вставить явное значение для столбца идентификаторов в таблице 'ImagesTable', когда IDENTITY_INSERT имеет значениеустановите на OFF.

Каков рекомендуемый способ добавления новых строк? Как я могу вставить новые строки с автоматически устанавливаемым идентификатором?

Если наличие репликации БД не распространяет начальное значение Identity, как мне справиться с этим, чтобы мне не приходилось управлять ошибками дублирующихся ключей (Я уверен, что я не вставляю дубликаты)?

1 Ответ

0 голосов
/ 13 октября 2019

Вам необходимо сегментировать диапазоны столбцов IDENTITY при двунаправленной репликации.

https://docs.microsoft.com/en-us/sql/relational-databases/replication/publish/replicate-identity-columns?view=sql-server-ver15

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...