Рейтинг:
2
Wendelius
Если вы пытаетесь использовать переменную для повторного заполнения таблицы, используйте @ перед именем или переменной. Например
DECLARE @rowcount INT;
SET @rowcount = 5;
DBCC CHECKIDENT ('tempsales', RESEED, @rowcount);
Или просто
DBCC CHECKIDENT ('tempsales', RESEED, 5);
Обратите внимание, что обычно повторное заполнение идентификатора не требуется, так как единственная цель-дать уникальные значения. Никогда не предполагайте, что значения непрерывны!
vijay_bale
Я сделал в точности то, что ты сказал. Но приходит Ошибка "необходимо объявить переменную скалера" @rowcount"
Wendelius
Не выполняйте операторы отдельно, вместо этого выполняйте их в одном пакете.
Если вы используете Management Studio, вы можете, например, выбрать все три строки и нажать клавишу F5, чтобы запустить выбранные операторы.
vijay_bale
работает в c#, так что все будет работать в сингальской пакетной na.
Мой код таков
против.Открыть();
SqlCommand cmd = new SqlCommand ("SELECT COUNT (*) FROM tempsales", con);
УМК.Метод executenonquery();
Int32 rowcount = (Int32)cmd.Executescalar так();
Ящик для сообщений.Шоу(количество строк.Метод toString());
Команда sqlcommand кд = новая команда sqlcommand("инструкция DBCC checkident, будет ('tempsales', повторное заполнение, @строк)", кон);
компакт-диск.Метод executenonquery();
Wendelius
Как уже было сказано,вы не можете получить непрерывную последовательность чисел с полем идентификации. Единственная цель идентичности-дать уникальные числа, а не непрерывные.
Рассмотрим ситуацию, когда у вас есть строки 1, 2, 3 и 4. Если 1 будет удален, что должно произойти? Если вы пересчитаете идентичность, она получит число 3, но оно уже существует...
Если вам нужно показать текущие номера строк, просто используйте ROW_NUMBER (Transact-SQL) | Microsoft Docs[^] при запросе.
Wendelius
На основе описания из решения 2:
"ex: - у меня есть записи 2,3,4,6,7,8 sno(index number) (1,5 я уже удалил), но это отображение чисел 1,2,3,4,5,6. Вот чего я хочу. Но когда я пытаюсь удалить 2 записи, это не так, потому что нет 2 существующих в обоих. но я попытался удалить 5-ю запись, которую он удалит. потому что этот 5-й индекс записи sno(index number) не находится в файле базы данных, но есть в этом списке то, что вы сказали, поэтому он будет удален, а номера также обновлены с самого начала. Может быть, я думаю, что объяснил все, что мог."
Я не уверен, правильно ли я понимаю, но вы пытаетесь удалить/обновить запись на основе ординалов? Например, если у вас есть значения 1,5,9 и 11 в базе данных, у вас будет 4 записи. При заказе у вас будет список 1,2,3 и 4. Однако вы не можете обновить запись 2 на основе порядкового номера, так как значение ключа равно 5. Поэтому, чтобы манипулировать записью, всегда используйте ключевое значение, а не позицию в списке или что-то подобное.
С другой стороны, может быть, я неправильно понял ваш пример...
Рейтинг:
0
OriginalGriff
Не. Идея поля идентичности заключается в том, что оно уникально, но (намеренно) не обязательно последовательно. На практике они последовательны, но SQL никогда не "повторно использует" освобожденные числа при удалении записей, чтобы любые другие системы или таблицы, ссылающиеся на строку через поле, не забирали "неправильные" данные.
Если вы хотите последовательный номер строки в поле идентификатора, а затем использовать row_number и порядок:
SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS [Sequence Number], * FROM MyTable
Это всегда даст вам последовательность, начинающуюся с 1, без пробелов.
"да, это дает, но я хочу отобразить все в datagridview, чтобы каждый раз, когда пользователь удаляет запись, она пересчитывалась"
Это тривиально! Все, что вам нужно, - это столбец, чтобы поместить его в него и обработать событие RowPrePaint:
void myDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
myDataGridView.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
}
vijay_bale
да это дает но я хочу отобразить все в datagridview так что каждый раз если пользователь удалит запись он будет пересчитывать
OriginalGriff
Ответ обновлен
vijay_bale
Это не работает точно.Эти порядковые номера не равны тому, что я поддерживаю в поле sno, которое записывает только удаленные записи.
OriginalGriff
Хочешь попробовать еще раз, на этот раз по-английски? :смеяться:
vijay_bale
конечно. Я попробую. Но я не настолько хорош. Потому что английский-не мой родной язык.
пример: - у меня есть 2,3,4,6,7,8 записей sno(index number) (1,5 я уже удалил), но это отображение чисел 1,2,3,4,5,6. Вот чего я хочу. Но когда я пытаюсь удалить 2 записи, это не так, потому что нет 2 существующих в обоих. но я попытался удалить 5-ю запись, которую он удалит. потому что этот 5-й индекс записи sno(index number) не находится в файле базы данных, но есть в этом списке то, что вы сказали, поэтому он будет удален, а номера также обновлены с самого начала. Может быть, я думаю, что объяснил все, что мог.