当前位置: 代码迷 >> Sql Server >> sql语句报错解决思路
  详细解决方案

sql语句报错解决思路

热度:84   发布时间:2016-04-24 09:48:34.0
sql语句报错
 INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) 
SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient 

[Err] 23000 - [SQL Server]Violation of PRIMARY KEY constraint 'PK__T_51_001__DB0FA398451F3D2B'. Cannot insert duplicate key in object 'dbo.T_51_001'.
01000 - [SQL Server]The statement has been terminated.

t_51_001表中没有数据,为什么会报错
------解决思路----------------------
你的select中有常量,会不会是这个常量重复引起的?
------解决思路----------------------
楼上已经说的很清楚了,违背了主键约束,主键字段值重复,先找下主键列

要么狠点

alter table dbo.T_51_001
drop constraint  dbo.T_51_001.PK__T_51_001__DB0FA398451F3D2B

再插入数据试试
------解决思路----------------------
因为 dbo.alarmclient 表不止一条记录,所以插入的多条数据主键都是 (22222,11)!
------解决思路----------------------
楼主语文老师是异次元来的!

你自己看下面这部分的执行结果,想想这批数据插入dbo.T_51_001会不会重复。
SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient 

------解决思路----------------------
c001,c002
这两列对数据有什么要求吗?
没有的话
 INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) 
SELECT ROW_NUMBER()OVER(ORDER BY GETDATE()),'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient 
类似这样,不让主键重复就可以了
  相关解决方案