SQL SERVER 2008 版本
执行代码如下:
IF OBJECT_ID('dbo.WaitStats') IS NOT NULL
DROP TABLE dbo.WaitStats;
GO
SELECT GETDATE() AS dt,
wait_type, waiting_tasks_count, wait_time_ms,
max_wait_time_ms, signal_wait_time_ms
into WaitStats
FROM sys.dm_os_wait_stats
WHERE 1 = 2;
GO
ALTER TABLE dbo.WaitStats ADD CONSTRAINT PK_WaitStats PRIMARY KEY(dt,wait_type);
CREATE INDEX idx_type_dt ON dbo.WaitStats(wait_type, dt);
GO
INSERT INTO WaitStats
SELECT GETDATE() as dt,
wait_type, waiting_tasks_count, wait_time_ms,
max_wait_time_ms, signal_wait_time_ms
FROM sys.dm_os_wait_stats;
查询结果:
(0 行受影响)
消息 2627,级别 14,状态 1,第 15 行
违反了 PRIMARY KEY 约束 'PK_WaitStats'。不能在对象 'dbo.WaitStats' 中插入重复键。
语句已终止。
我查询了
SELECT GETDATE() as dt,
wait_type, waiting_tasks_count, wait_time_ms,
max_wait_time_ms, signal_wait_time_ms
FROM sys.dm_os_wait_stats;
没有重复键呀,这是为什么不给插入呢.想不明白,请高手指点,谢谢!
------解决方案--------------------
你这样select出来的dt是重复的,关键看wait_type是否有重复
select wait_type,count(1) as cnt from sys.dm_os_wait_stats
group by wait_type having count(1)>1
------解决方案--------------------
INSERT INTO WaitStats
SELECT GETDATE() as dt,--这个是重复的
wait_type,--你检查原表里面的这个字段是否重复
waiting_tasks_count, wait_time_ms,
max_wait_time_ms, signal_wait_time_ms
FROM sys.dm_os_wait_stats;
报错是不会骗你的
------解决方案--------------------
看起来是人品问题
呵呵 你去先去掉约束,数据插完看看到底什么重复了