楼主语文老师是异次元来的!你自己看下面这部分的执行结果,想想这批数据插入dbo.T_51_001会不会重复。 SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11' FROM dbo.alarmclient
表中没有数据,我的理解是不应该会出现这个重复的问题,所以我无法理解它为什么给我报这个错 你是说dbo.alarmclient 表中没有数据? alarmclient中是有数据的都是唯一的数据不存在重复的问题 原来如此,虽然有数据,但是,你只取列firstreadtime,lastreadtime,而其它的需要插到表T_51_001的列,都是一些常量,包括主键列,22222,11,作为主键数据就都是重复的~~ INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11' FROM dbo.alarmclient alarmclient 表中只要有两列,那么以上语句的效果就类似 INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) VALUES(22222,'23',firstreadtime1,lastreadtime1,'5' ,'9','11') INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) VALUES(22222,'23',firstreadtime2,lastreadtime2,'5' ,'9','11') 这样,那么第一次插入不会有事,第二次就违反主键了
表中没有数据,我的理解是不应该会出现这个重复的问题,所以我无法理解它为什么给我报这个错 你是说dbo.alarmclient 表中没有数据? alarmclient中是有数据的都是唯一的数据不存在重复的问题 原来如此,虽然有数据,但是,你只取列firstreadtime,lastreadtime,而其它的需要插到表T_51_001的列,都是一些常量,包括主键列,22222,11,作为主键数据就都是重复的~~ INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11' FROM dbo.alarmclient alarmclient 表中只要有两列,那么以上语句的效果就类似 INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) VALUES(22222,'23',firstreadtime1,lastreadtime1,'5' ,'9','11') INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) VALUES(22222,'23',firstreadtime2,lastreadtime2,'5' ,'9','11') 这样,那么第一次插入不会有事,第二次就违反主键了 good job,那我怎么样才能让它实现插入一次的,对应的主键做对应的插入
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 类似这样,不让主键重复就可以了
INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) SELECT c001,'23',firstreadtime,lastreadtime,'5' ,'9','11' FROM dbo.alarmclient WHERE c001 = 123456 类似这样,在条件上处理,这样就没有把c001写死话说,如果你的alarmclient表中的c001是和表T_51_001的c001对上的话, 如果需要把alarmclient的全部信息插入表T_51_001的话,把上面的条件去掉就可以了
INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011) SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11' FROM dbo.alarmclient 你的表dbo.T_51_001没有数据!!但你的dbo.alarmclient应该有数据吧!! 如果你插入常量的列是主键,那绝对是报错的!!除非dbo.alarmclient只有一条数据!!明白了吗
FROM dbo.alarmclient
这个结果在主键列上有重复
drop constraint dbo.T_51_001.PK__T_51_001__DB0FA398451F3D2B再插入数据试试
FROM dbo.alarmclient
只要这个结果有两条记录,即表alarmclient 有两条记录
那么主键就重复了能说的详细点吗,有重复我是知道的,我表格里没有数据为什么会出现重复,我不太明白 c001和c011,是主键,就是22222和11是主键
而T_51_001的主鍵c001的值都是22222,這樣就引起主鍵對應的數據重複,所以報錯。
假設T_51_001的主鍵是 c001,而dbo.alarmclient 表中的數據有多條
而T_51_001的主鍵c001的值都是22222,這樣就引起主鍵對應的數據重複,所以報錯。
表中没有数据,我的理解是不应该会出现这个重复的问题,所以我无法理解它为什么给我报这个错
你是说dbo.alarmclient 表中没有数据?
你是说dbo.alarmclient 表中没有数据?
alarmclient中是有数据的都是唯一的数据不存在重复的问题
SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient
你是说dbo.alarmclient 表中没有数据?
alarmclient中是有数据的都是唯一的数据不存在重复的问题
原来如此,虽然有数据,但是,你只取列firstreadtime,lastreadtime,而其它的需要插到表T_51_001的列,都是一些常量,包括主键列,22222,11,作为主键数据就都是重复的~~ INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient alarmclient 表中只要有两列,那么以上语句的效果就类似
INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
VALUES(22222,'23',firstreadtime1,lastreadtime1,'5' ,'9','11') INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
VALUES(22222,'23',firstreadtime2,lastreadtime2,'5' ,'9','11')
这样,那么第一次插入不会有事,第二次就违反主键了
你是说dbo.alarmclient 表中没有数据?
alarmclient中是有数据的都是唯一的数据不存在重复的问题
原来如此,虽然有数据,但是,你只取列firstreadtime,lastreadtime,而其它的需要插到表T_51_001的列,都是一些常量,包括主键列,22222,11,作为主键数据就都是重复的~~ INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient alarmclient 表中只要有两列,那么以上语句的效果就类似
INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
VALUES(22222,'23',firstreadtime1,lastreadtime1,'5' ,'9','11') INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
VALUES(22222,'23',firstreadtime2,lastreadtime2,'5' ,'9','11')
这样,那么第一次插入不会有事,第二次就违反主键了
good job,那我怎么样才能让它实现插入一次的,对应的主键做对应的插入
这两列对数据有什么要求吗?
没有的话
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
类似这样,不让主键重复就可以了
SELECT c001,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient WHERE c001 = 123456
类似这样,在条件上处理,这样就没有把c001写死话说,如果你的alarmclient表中的c001是和表T_51_001的c001对上的话,
如果需要把alarmclient的全部信息插入表T_51_001的话,把上面的条件去掉就可以了
INSERT INTO dbo.T_51_001( c001,c002,c003,c004,c005,c009,c011)
SELECT 22222,'23',firstreadtime,lastreadtime,'5' ,'9','11'
FROM dbo.alarmclient 你的表dbo.T_51_001没有数据!!但你的dbo.alarmclient应该有数据吧!!
如果你插入常量的列是主键,那绝对是报错的!!除非dbo.alarmclient只有一条数据!!明白了吗