使用游标删除记录

时间:2009-12-21 10:37:51

标签: sql-server cursors

我对SQL的了解有限,所以有人可以告诉我,如果我的想法是正确的。随着时间的推移,我有一张桌子慢慢填满。我需要删除第一条记录中的记录到表中的给定点。由于主键基于GUID,我知道我不能轻易删除,因为我不能基于GUID进行排序(这在前一个线程中讨论过)。是否可以使用游标查看表中的第一条记录,并通过表删除记录,直到达到某个GUID为止?我遇到的问题是我需要删除在GUID定义的表之前放入表中的所有记录,但是如果记录的数据早于预定义的日期,我只能删除它们。我知道这有点乱,但我不得不改造一个解决方案,所以一个笨重的解决方案现在可以做。

我正在使用MS SQL Server 2008

2 个答案:

答案 0 :(得分:4)

首先,在使用任何类型的SQL查询时,您不得不怀疑是否真的想要使用游标。

SQL基于集合,因此它非常高效并且能够处理“数据集”。

首先,您对“第一条记录”的定义是什么?如何确定记录是否出现在另一条记录之前?

我了解您在表格中定义了“日期时间”列?

是否可以确定您仍希望保留在表格中的记录的“日期时间”?

如果是这样,我认为您可以使用WHERE子句在表上执行DELETE,以确保不会删除比指定日期早的记录。

答案 1 :(得分:0)

假设GUID是你如何找出删除的距离:

DELETE FROM TheTable WHERE DateColumn < (SELECT DateColumn FROM TheTable WHERE GuidColumn = 'GUIDGUID-GUID-GUID-GUID-GUIDGUIDGUID')