提问人:MMV 提问时间:5/22/2023 最后编辑:WahlstrommmMMV 更新时间:5/23/2023 访问量:80
如何添加触发器以删除表中的重复项
How to add a trigger to delete duplicates in table
问:
嗨,我下面有一张这样的表格:
[dbo].[table1](
[predictions] [int] NULL,
[timestamp] [datetime] NULL,
[train1] [int] NULL,
[train2] [int] NULL)
我正在使用 dbx job 将数据插入此表。有时我们会得到表中时间戳列的重复项。
我想在数据库中添加一个触发器,以便在发生重复项时删除重复项。
我现在正在手动删除运行下面此查询的重复值。
With duplicates As (Select *, ROW_NUMBER() Over (PARTITION by timestamp Order by timestamp) as Duplicate From table1) select From duplicates Where Duplicate > 1 ;
任何帮助都非常感谢!
答:
4赞
Charlieface
5/22/2023
#1
您可以使用鲜为人知的IGNORE_DUP_KEY
选项。
ALTER TABLE dbo.table1
ADD CONSTRAINT uq_table1_timestamp
UNIQUE (timestamp)
WITH (IGNORE_DUP_KEY = ON);
这将自动(且静默地)忽略重复行的插入。
请注意,这不会删除现有的重复项,您首先需要运行:
WITH cte AS (
SELECT *,
rn = ROW_NUMBER() OVER (PARTITION BY timestamp ORDER BY timestamp)
FROM yourTable
)
DELETE cte
WHERE rn > 1;
评论
1赞
M.Ali
5/22/2023
从来不知道这个选项,听起来很酷,但也很危险,数据很可能会丢失,因为它被默默地忽略了IGNORE_DUP_KEY
评论
instead of