Как обновить значения столбца «номер строки» 1..N после УДАЛЕНИЯ строк? - PullRequest
1 голос
/ 27 мая 2020

У меня есть эта таблица:

TabelName: [dbo].[1202-904200]

Когда я удаляю поле в этой таблице, мне нужно увеличить все следующие строки.

Например: если я удалю BoxNo '4' , тогда строки, которые находятся после последней строки BoxNo '4' (5,6,7,. .et c) должен сделать приращение на 1 и иметь вид (4,5,6, ... et c.). Надеюсь, мне удастся объяснить проблему .

Не могли бы вы помочь мне выполнить это с помощью SQL запроса сервера?

Заранее спасибо.

1 Ответ

0 голосов
/ 27 мая 2020

Автоматическое выполнение действий после удаления строк - это то, для чего предназначены TRIGGERS .

В вашем случае это выглядит примерно так:

CREATE TRIGGER MyTable_AfterDelete
ON MyTable
FOR DELETE
AS 
update MyTable set RowCounter = RowCounter + 1
from deleted
     inner join MyTable on MyTable.BoxNo > deleted.BoxNo

GO

Как видите SQL Сервер не запускает триггер после каждой удаленной строки, но после выполнения каждого оператора DELETE, который может включать несколько удаленных строк, поэтому нам нужно использовать псевдотаблицу «удалено» для применения нашего действия. на каждой из этих удаленных строк.

PS : Вот как можно сделать то, что вы просили, хотя я согласен с комментариями, в которых говорится, что вы могли бы лучше структурировать эту проблему вместо того, чтобы для обновления такого количества строк после каждого удаления.

UPDATE

Если вы хотите выполнять его вручную для каждой инструкции удаления, а не автоматически для триггера, вы можете передать a параметр в оператор DELETE на C#, чтобы обновить последующие RowCounters. Что-то вроде:

delete from MyTable where BoxNo = @BoxNo

update MyTable set RowCounter = RowCounter + 1 where BoxNo > @BoxNo
...