2009-12-21 2 views
0

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

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

+0

Есть некоторые другие критерии, такие как поля даты и времени вы могли бы использовать? Использование курсора для этого - самое худшее возможное решение - с DATETIME, вы могли бы просто «УДАЛИТЬ ОТ ТЕМНОГО ГДЕ» MyDateField <= '20090531'' или что-то в этом роде и сделать с ним .... –

ответ

4

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

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

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

Насколько я понимаю, у вас есть столбец «datetime», определенный в вашей таблице?

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

Если это так, я думаю, вы можете просто выполнить DELETE в таблице с предложением WHERE, которое гарантирует, что записи, которые старше, чем указанная дата, не удаляются.

+0

+1 определенно ** НЕ ** используйте курсор для чего-то подобного! –

0

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

DELETE FROM TheTable WHERE DateColumn < (SELECT DateColumn FROM TheTable WHERE GuidColumn = 'GUIDGUID-GUID-GUID-GUID-GUIDGUIDGUID') 
Смежные вопросы