SQL Server Mgmt Studio портит мою базу данных! - PullRequest
3 голосов
/ 11 июля 2010

Это фактически разрушило мой день. У меня есть большее количество таблиц со многими FK-связями между ними. Одна из таблиц (назовем это таблицей A) имеет вычисляемый столбец, который вычисляется с помощью UDF с привязкой к схеме и также индексируется по полному тексту.

Если я редактирую любую таблицу (назовем ее таблицей B), которая каким-либо образом связана (например, с помощью FK) с таблицей с полнотекстовым индексированным вычисляемым столбцом (таблица A), и я сохраняю ее происходит следующее:

  • Изменения в таблице (таблица B) сохраняются
  • Я получаю сообщение об ошибке: «В столбце abcd нет полнотекстового индексации». в отношении таблицы А, которую я даже не редактировал, а затем «Пользователь отменил диалог сохранения»
  • УДАЛЕНЫ все связи FK со ВСЕМИ ТАБЛИЦАМИ из таблицы B

Что, черт возьми, происходит ??? Может кто-нибудь объяснить мне, как это может произойти?

1 Ответ

2 голосов
/ 21 июля 2010

У меня была такая же проблема.Как сказал Уилл А, управляющая студия сделает следующие шаги для обновления таблицы и ее внешних ключей:

  1. Создание новой таблицы с именем temp_
  2. Копирование содержимого из старой таблицы в новую
  3. Удалить все ограничения, индексы и внешние ключи
  4. Удалить старую таблицу
  5. Переименовать новую таблицу в = старая таблица
  6. Воссоздать внешние ключи, индексы иограничения

У меня могут быть первые 3 в неправильном порядке, но вы поняли идею.В моем случае я потерял целые таблицы, а не только внешние ключи.Лично мне не нравится, как это происходит, поскольку ОЧЕНЬ много времени приходится создавать заново индексы в таблице с большим количеством данных. Если это небольшое изменение, я обычно делаю это самостоятельно в T-SQL.

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

@ OMGPonies, почему вы не можете удалить внешний ключ, если в таблице есть данные?Конечно вы можете.Существуют только ограничения на создание внешних ключей для таблиц с данными, но это только в том случае, если это нарушает ограничение.Однако даже этого можно избежать, используя параметр WITH NOCHECK при создании ключа.Да, я знаю, что он сломается, когда вы попытаетесь обновить неверный набор результатов.

...