【问题标题】:Reset Identity Value To 1 After Replication复制后将标识值重置为 1
【发布时间】:2019-10-02 21:52:03
【问题描述】:

我使用 SQL Server 并创建了一个复制。复制效果很好。但我已经创建了一个备份订阅者的数据库来检查值。我检查带有“IDENT_CURRENT”的表,我看到标识列的值为 1。这正常吗?我不能向表中插入新的内容,因为它会引发“违反主键”错误。 我该如何解决这个问题?

【问题讨论】:

    标签: sql sql-server replication database-replication


    【解决方案1】:

    您可以使用DBCC CHECKIDENT 重新设定身份值。因此,找出表中标识列的最大值,然后运行如下代码:

    例如

    USE AdventureWorks2012;  
    GO  
    DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);  
    GO  
    

    【讨论】:

      【解决方案2】:

      我已经编写了自己的解决方案。 此代码将所有表的标识值重置为最大值。 我在数据库复制后使用它。

      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
            
          
      
          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);'
                  
          )
      

      从 emp_cursor 获取下一个
      INTO @ColName,@TableName

      END     
      CLOSE emp_cursor;    
      DEALLOCATE emp_cursor;  
      

      【讨论】:

        猜你喜欢
        • 2020-02-28
        • 2014-08-13
        • 2014-12-08
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多