在项目中,由于表设计问题,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了
浙公网安备 33010602011771号