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