Сбросить значение идентичности до 1 после репликации - PullRequest
0 голосов
/ 15 мая 2019

Я использую SQL Server и создал репликацию.Репликация работает очень хорошо.Но я создал резервную копию подписчика для проверки значений.Я проверяю таблицы с "IDENT_CURRENT" и вижу, что значения столбца идентичности равны 1. Это нормально?Я не могу вставить новую таблицу, потому что она вызывает ошибку "Violation of PRIMARY KEY".Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я написал свое собственное решение. Этот код сбрасывает все значения идентификаторов таблицы до максимального значения. Я использую его после репликации базы данных.

DECLARE @TableName AS NVARCHAR(MAX)
DECLARE @ColName AS NVARCHAR(MAX)

DECLARE emp_cursor CURSOR FOR     
select COLUMN_NAME, TABLE_NAME
    from INFORMATION_SCHEMA.COLUMNS
    where COLUMNPROPERTY(object_id(TABLE_SCHEMA+'.'+TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
    order by TABLE_NAME    

OPEN emp_cursor   

FETCH NEXT FROM emp_cursor     
INTO @ColName,@TableName 

WHILE @@FETCH_STATUS = 0    
BEGIN    
    --PRINT @ColName
    --PRINT @TableName

    FETCH NEXT FROM emp_cursor     
        INTO @ColName,@TableName  

    DECLARE @MaxId  AS INT

    --PRINT @TableName
    EXEC ('DECLARE @MaxId  AS INT;
            DECLARE @TableName  AS NVARCHAR(MAX)='''+@TableName+''';
            SELECT @MaxId=ISNULL(MAX(' + @ColName + '),0)+1 FROM '+@TableName+';'+
            'DBCC CHECKIDENT ('+@TableName+', RESEED,@MaxId);'+
            'PRINT ''Table: ''+ @TableName +'', New Identity Val:''+CAST(@MaxId AS NVARCHAR);PRINT CHAR(13);'

    )

END     
CLOSE emp_cursor;    
DEALLOCATE emp_cursor;  
0 голосов
/ 15 мая 2019

Можно повторно заполнить значение идентификатора с помощью DBCC CHECKIDENT . Итак, найдите максимальное значение столбца идентификаторов в таблице и выполните что-то вроде:

например

USE AdventureWorks2012;  
GO  
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);  
GO  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...