Очистить все строки в таблице, обнуляя спецификацию идентичности до нуля и не затрагивая внешние ключи? - PullRequest
3 голосов
/ 23 декабря 2009

Мы уже создали структуру базы данных со всеми связями и зависимостями. Но внутри таблиц были только фиктивные данные, и нам нужно избавиться от этих фиктивных данных и начать добавлять правильные. Как мы можем очистить все и оставить первичные ключи (IsIdentity: yes) обратно в ноль, а также без влияния на реляционную структуру сторонних таблиц.

Большое спасибо!

Ответы [ 4 ]

9 голосов
/ 23 декабря 2009

Вы можете предпринять следующие шаги:

-- disable all foreign key constraints
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"

-- enable all constraints
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

Подробнее об отключении ограничений и триггеров здесь

если в некоторых таблицах есть столбцы идентификаторов, мы можем захотеть их заполнить заново

EXEC sp_MSforeachtable "DBCC CHECKIDENT ( '?', RESEED, 0)"

Обратите внимание, что поведение RESEED отличается в новой таблице и в таблице, в которую ранее была вставлена ​​некоторая дата из BOL :

ПРОВЕРКА DBCC ('имя_таблицы', RESEED, newReseedValue)

Текущее значение идентификатора установлено на newReseedValue. Если нет строк был вставлен в таблицу, так как был создан, первая строка вставлена после выполнения DBCC CHECKIDENT будет используйте newReseedValue в качестве идентификатора. В противном случае следующая вставленная строка будет используйте newReseedValue + 1. Если значение newReseedValue меньше, чем максимальное значение в столбце идентичности, сообщение об ошибке 2627 будет сгенерировано по последующим ссылкам на таблицу.

1 голос
/ 04 апреля 2011

Я бы использовал TRUNCATE:

-- Truncate table (very fast, and it resets Identity as well)
EXEC sp_MSForEachTable "TRUNCATE TABLE ?"

Конечно, отключите и снова включите проверочные ограничения, как предложено Кристофом.

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

Создайте файл sql только для схемы базы данных, используя Мастер публикации базы данных и включите опцию удаления таблиц, если она существует. Запустите этот скрипт в своей базе данных, и он все очистит и даст вам свежую схему по мере необходимости.

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

Перезаполнение:

DBCC CHECKIDENT (yourtable, reseed, 1)

для установки первичного ключа на 1

удалить из таблицы следует удалить данные, но не повлиять на другие вещи.

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