在项目中,由于表设计问题,ID是自增标识列,但不是主键,在实际操作中,插入数据时会出现错误。


 

  • 具体错误信息:Violation of PRIMARY KEY constraint 'PK_COMMONCONTENT'. Cannot insert duplicate key in object 'dbo.CommonContent'.

 

  • 解决方案:利用Sqlserver自带的DBCC语句

  语法如下:

      DBCC CHECKIDENT
      ( 'table_name'[ , { NORESEED | { RESEED ][ , new_reseed_value ] } } ] )

  

  参数:

   'table_name' 是要对其当前标识值进行检查的表名。指定的表必须包含标识列。

  NORESEED 指定不应更正当前标识值。

  RESEED 指定应该更正当前标识值。

  new_reseed_value 是在标识列中重新赋值时要使用的值。


 

  处理后的Sql语句:

  

  USE MKT go

  DECLARE @tableName VARCHAR(200) SET @tableName = 'CommonContent'

  DECLARE @sql VARCHAR(4000) SET @sql =' print  ''×××将修改表 '+@tableName+' 的identity值×××'' print ''''

  DECLARE @newID INT SELECT @newID = MAX(ID)FROM dbo.'+@tableName + ' dbcc   CHECKIDENT('''+@tableName+''',reseed,@newID) '

  EXEC ( @sql)

  这个写好之后保存在Red Gate软件里面自定义Sql语句里面,以后出现这个问题就很快解决了,为了不出现主键冲突的问题,如果ID为自增由于某种原因但是没有设置主键,可以设置一个唯一约           束就OK了