Каков эквивалентный эффект усечения таблицы, когда на таблицу ссылается внешний ключ - PullRequest
0 голосов
/ 05 февраля 2010

Из документов MSDN для Sql Server 2005 :

Вы не можете использовать TRUNCATE TABLE для таблиц, которые:

  • На них ссылается ограничение FOREIGN KEY.
  • Участвовать в индексированном представлении.
  • Публикуются с использованием репликации транзакций или репликации слиянием.

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

Обновление: Это для конфигурации тестирования, где я также очищаю таблицу ссылок, поэтому целостность внешнего ключа не проблема.

Какие есть другие способы обойти это?

Ответы [ 4 ]

1 голос
/ 05 февраля 2010

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

Правильный процесс - сначала удалить ссылки на записи, если таковые имеются, затем удалить ограничение FK, затем обрезать таблицу, а затем восстановить ограничение fk. Если вы пропустите первый шаг, вы создадите кошмар целостности данных, в котором запись, указывающая на oldid 100, не указывает на новую запись, которой присвоено значение 100, и это не та запись, которой она должна соответствовать.

1 голос
/ 05 февраля 2010

Вы можете удалить все строки и затем выполнить команду DBCC CHECKIDENT (Tablename, RESEED, 0) для сброса начального числа идентификаторов

Но снова DELETE полностью регистрируется, а TRUNCATE минимально регистрируется и будет во много раз быстрее

Другой вариант - удалить ограничения внешнего ключа, затем выполнить усечение, а затем воссоздать ограничения внешнего ключа.

0 голосов
/ 05 февраля 2010

Вам нужно будет удалить ограничение, обрезать таблицу, а затем добавить ограничение обратно. Тем не менее, вы должны быть очень осторожны с этим. Если в таблице есть строки, для которых вы отбрасываете ссылку FK, вы не сможете добавить ее, пока эти строки не будут удалены или столбец FK в другой таблице не будет очищен.

0 голосов
/ 05 февраля 2010

Вы можете удалить внешний ключ, обрезать таблицу, а затем воссоздать внешний ключ.

...