Удалить запись и все записи, предшествующие ей - PullRequest
0 голосов
/ 18 декабря 2009

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

Я использую сервер SLQ 2008

Ответы [ 4 ]

2 голосов
/ 18 декабря 2009

Учитывая природу GUID и тот факт, что вы используете его в качестве первичного ключа, тогда NO вы не сможете этого сделать.

Если у вас есть дополнительное поле, которое может помочь с упорядочением, тогда Да , или если у вас было поле IDENTITY .

На основе указанного столбца DateCol:

Посмотрите на это

DECLARE @Table TABLE(
        ID uniqueidentifier,
        DateVal DateTime
)

INSERT INTO @Table SELECT NEWID(), '06 Jan 2009'
INSERT INTO @Table SELECT NEWID(), '05 Jan 2009'
DECLARE @GUID uniqueidentifier
SELECT @GUID = NEWID()
INSERT INTO @Table SELECT @GUID, '04 Jan 2009'
INSERT INTO @Table SELECT NEWID(), '03 Jan 2009'
INSERT INTO @Table SELECT NEWID(), '02 Jan 2009'
INSERT INTO @Table SELECT NEWID(), '01 Jan 2009'

SELECT  *
FROM    @Table

DELETE FROM @Table
WHERE   DateVal <= (SELECT DateVal FROM @Table WHERE ID = @GUID)

SELECT  *
FROM    @Table
2 голосов
/ 18 декабря 2009

В своем вопросе вы заявляете ", которые стоят перед ним ." или " предыдущие записи ". Это понятие должно быть определено более четко. SQL основан на теории множеств - и в наборе нет неявного порядка для элементов в наборе (строк в таблице). Вы должны определить, что означает предшествующий , основываясь на значении некоторого атрибута строка ...

1 голос
/ 18 декабря 2009

Поскольку вы используете GUID в качестве первичного ключа, для него не может быть определен какой-либо порядок (если только вы не использовали NEWSEQUENTIALID (), и даже он будет последовательным в том же окне до перезапуска), поэтому вам нужен другой столбец , например, отметка времени или идентификатор для упорядочения строк.

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

Можно извлечь дату / время из некоторых GUID, в зависимости от того, как они были созданы, однако, как правило, это плохая идея. Как уже упоминали другие, вы должны использовать личность или временную метку - это проще, безопаснее и разумнее.

Соответствующие ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...