我试图有选择地删除SQL Server 2005表中的记录而不循环游标.该表可以包含许多记录(有时> 500,000),因此循环太慢.
数据:
ID, UnitID, Day, Interval, Amount
1 100 10 21 9.345
2 100 10 22 9.367
3 200 11 21 4.150
4 300 11 21 4.350
5 300 11 22 4.734
6 300 11 23 5.106
7 400 13 21 10.257
8 400 13 22 10.428
Run Code Online (Sandbox Code Playgroud)
关键是:ID,UnitID,Day,Interval.
在此示例中,我希望删除记录2,5和8 - 它们与现有记录(基于密钥)相邻.
注意:记录6不会被删除,因为一旦5消失,它就不再相邻了.
我问得太多了吗?
我认为你所要求的不可能 \xe2\x80\x94 但你也许能够接近。看来您几乎可以通过查找具有如下自连接的记录来做到这一点:
\n\nSELECT t1.id\nFROM\n table t1 JOIN table t2 ON (\n t1.unitid = t2.unitid AND\n t1.day = t2.day AND\n t1.interval = t2.interval - 1\n )\nRun Code Online (Sandbox Code Playgroud)\n\n但问题是,这也会发现 id=6 。但是,如果您根据此数据创建临时表,它可能比原始数据小得多,因此使用游标扫描速度要快得多(以解决 id=6 问题)。然后您可以执行 aDELETE FROM table WHERE id IN (SELECT id FROM tmp_table)来删除行。
可能有一种方法可以解决没有光标的 ID=6 问题,但如果是这样,我没有看到它。
\n