Как вставить пустую запись в таблицу - PullRequest
0 голосов
/ 10 декабря 2010
----------
ID NAME
3   A
4   B
5   C
----------

когда я удаляю всю запись, она продолжается после записи номер пять, но я хочу, чтобы она вставила первый индекс этой таблицы. кто-нибудь может мне помочь?

Ответы [ 5 ]

2 голосов
/ 10 декабря 2010

Я предполагаю, что у вас есть столбец идентификатора в качестве столбца IDENTITY, и вы хотите сбросить его, чтобы он снова начинался с 1 после удаления всех строк из таблицы.

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

Во-вторых, если вы хотите сделать такой сброс, вы должны использовать DBCC CHECKIDENT


Редактировать

Если вы действительно зависите от этих значений идентификаторов (скажем, потому, что они также используются в приложении), то это хороший показатель того, что в столбце не должно быть свойства IDENTITY. К сожалению, вы не можете удалить это свойство напрямую - вам придется создать копию таблицы без этого свойства, скопировать все строки, удалить исходную таблицу и переименовать копию. Management Studio сделает вид, что вы можете просто удалить свойство, но сделает то, что я только что описал, за кадром.

1 голос
/ 10 декабря 2010

Простой способ будет

TRUNCATE TABLE mytable;

вместо

DELETE FROM mytable

Из СТОЛ TRUNCATE (Transact-SQL)

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

0 голосов
/ 10 декабря 2010

Функция идентификации баз данных предназначена для того, чтобы разные записи НИКОГДА не имели одинаковый идентификатор. Это справедливо не только для записей, существующих одновременно, но и для новых записей, вставляемых после удаления другой. Это чрезвычайно полезно, чтобы избежать конфликтов. Хотя иногда кажется, что у некоторых людей чувство вкуса нарушается, это не помогает.

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

0 голосов
/ 10 декабря 2010

Я думаю, что вы хотите перезапустить значение автоматически сгенерированного столбца id с 1 снова? если это столбец IDENTITY, вы можете сбросить начальное значение с помощью следующей команды

DBCC CHECKIDENT('YourTableNameHere', RESEED, 0)
0 голосов
/ 10 декабря 2010

Похоже, ваш столбец ID является столбцом IDENTITY - он всегда добавляет следующее значение (независимо от удалений).

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

В любом случае, есть несколько способов сделать это:

Для разового использования используйте SET IDENTITY INSERT ON:

SET IDENTITY INSERT dbo.myTable ON

INSERT INTO myTable
(ID, NAME)
VALUES
(1, 'H')

SET IDENTITY INSERT dbo.myTable OFF

Чтобы сбросить высев, вам нужно использовать команду DBCC CHECKIDENT, используя RESEED:

DBCC CHECKIDENT('myTable', RESEED, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...