Вставьте между двумя рядами и повторно серийные номера - PullRequest
0 голосов
/ 29 августа 2011

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

например: всего 5 записей, в которые я хочу вставить после 3-й строки, а новая добавленная строкаустановить 4-й и 4-й, 5-й ряд получит серийный номер 5 и 6.

1 Ответ

3 голосов
/ 29 августа 2011

В принципе в SQL нет такой вещи, как «между двумя записями» - собственный порядок записей не объявляется.Вы должны запрашивать данные в любом порядке.

Как насчет второй части вашего вопроса - обновление серийных номеров, тогда у вас есть два варианта.

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

Второй - увеличить все серийные номера, больше 3 в вашем случаеи вставьте новую запись после этого:

Update mytable Set serialno=serialno+1 Where serialno > @lastnumbertokeep
Insert Into mytable (serialno, otherfields) Values (@lastnumbertokeep+1, othervalues)

Для 5 записей и одного пользователя за раз, что не является проблемой;для миллионов записей и 10 одновременных обновлений это блокирует базу данных на длительное время и может вызвать неприятные побочные эффекты.

...