Удаление записей с помощью курсора - PullRequest
0 голосов
/ 21 декабря 2009

У меня ограниченные знания SQL, поэтому кто-нибудь может сообщить мне, верны ли мои мысли. У меня есть стол, который медленно заполняется с течением времени. Мне нужно удалить записи из первой записи в данный момент в таблице. Поскольку первичный ключ основан на GUID, я знаю, что не могу легко удалить, потому что не могу сортировать по GUID (это обсуждалось в предыдущем потоке). Можно ли будет использовать курсор для просмотра первой записи в таблице и проходить через таблицу, удаляя записи, пока я не достигну определенного GUID? У меня проблема в том, что мне нужно удалить все записи, которые были помещены в таблицу, до записи, определенной GUID, но я могу удалить их, только если данные записи старше, чем предварительно определенная дата. Я знаю, что все это немного грязно, но мне нужно ретро-решение, которое пока подойдет для телесного решения.

Я использую MS SQL Server 2008

Ответы [ 2 ]

4 голосов
/ 21 декабря 2009

Прежде всего, вы должны задаться вопросом, действительно ли вы хотите использовать курсор при работе с любым видом SQL-запроса.

SQL основан на множестве, поэтому он очень эффективен и способен обрабатывать «наборы» данных.

Перво-наперво, как вы определяете «первую запись»? Как вы определяете, предшествует ли запись другой записи?

Я понимаю, что в вашей таблице определен столбец 'datetime'?

Можно ли определить дату и время записи, которую вы все еще хотите сохранить в таблице?

Если это так, я думаю, вы можете просто выполнить УДАЛЕНИЕ для таблицы с предложением WHERE, которое гарантирует, что записи, которые старше указанной даты, не будут удалены.

0 голосов
/ 21 декабря 2009

Предполагая, как GUID определяет, как далеко вы хотите удалить:

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