Включить, но не удалить SQL Schema Compare
Я пытаюсь использовать SQL Schema Compare в Visual Studio 2013/15, и я столкнулся с проблемой, заключающейся в том, что удаление таблиц из delete удаляет их из обработки вообще.
Проблема заключается в том, что таблицы, которые он пытается удалить, представляют собой таблицы, созданные клиентом, поэтому, когда мы синхронизируем нашу версию с их базами данных, она просит их удалить. Мы не хотим их удалять, но некоторые из их таблиц имеют ограничения на наши, поэтому, когда он пытается CCDR, он терпит неудачу из-за ограничений таблицы. Есть ли способ добавить таблицу, которая будет (воссоздана? Как и все остальные?), Не записывая сценарии для каждого клиента, чтобы сделать то, что SQL Schema Compare уже делает только для этих нескольких таблиц?
Red-Gate SQL Compare делает это как-то, но он скрыт от нас, поэтому не совсем уверен, как это достигается. Диск не удаляет, но не вызывает ошибки на script.
UPDATE:
Опция "Ограничения кавычки не в источнике" не работает корректно. Это действительно снижает некоторые из них, однако есть и другие, что он просто не оставляет ограничений. В инструменте red-gate, когда мы сравнивали, я нашел, как получить SQL от него, и их продукт не говорит, что таблица должна быть обновлена вообще, в то время как Visual Studio делает. Они, похоже, работают почти одинаково, но неудачные таблицы - это те, которые не должны обновляться вообще (см. Ниже)
Обновление 2:
Другая проблема, которую я обнаружил, - "Игнорировать сортировку столбцов" также не работает корректно, так как таблицы, которые не должны быть сброшены, говорят, что их нужно обновлять, даже если это только порядок изменения столбца, а не фактический столбца или данных, что заставляет это чувствовать себя больше как отчет об ошибке, чем что-либо.
![Игнорировать проверку сопоставления столбцов]()
![Показывать сортировку столбцов]()
Ответы
Ответ 1
Мое предложение с этими типами предварительных вычислений данных - не использовать Visual Studio. Поместите логику на движок Sql и напишите код для этого в Sql. Из-за проблем с многопользовательской блокировкой механизма Sql эти типы процессов подвержены сбою, когда неправильные комбинации действий пользователя происходят одновременно. Инструмент Visual Studio не может взаимодействовать с проблемами блокировки данных из-за изменения записей, которые может использовать механизм Sql. Если вы даже заработаете, это будет безопасно работать, если вы находитесь в режиме одного пользователя.
Это удобно использовать инструмент, проще, чем писать Sql, но есть огромные риски надежности и согласованности для перехода по этому пути.
Ответ 2
Я не знаю, поможет ли это, но я нашел этот абзац
на следующей странице:
https://msdn.microsoft.com/en-us/library/hh272690(v=vs.103).aspx
Обновление завершится неудачно, потому что наше изменение связано с изменением столбца от NOT NULL до NULL и в результате приводит к потере данных. Если ты хочешь продолжите обновление, нажмите кнопку "Параметры" (пятый слева) на панели инструментов для сравнения схем и снимите флажок блокировать инкрементное развертывание, если опция потери данных.