Как использовать сравнение схем для сопоставления различных определений баз данных

В SQL Server Data Tools (SSDT) входит программа сравнения схем, которая позволяет сравнивать два определения базы данных. Источником и целью сравнения может быть любое сочетание подключенной базы данных, проекта базы данных SQL Server, файла моментального снимка и файла DACPAC. Результаты сравнения выводятся в виде набора действий, которые необходимо выполнить с целевой базой, чтобы сделать ее идентичной исходной базе. После завершения сравнения можно обновить целевой объект напрямую (если целевой объект является проектом или базой данных) или создать скрипт обновления, который имеет тот же эффект.

Различия между источником и целью представляются в виде сетки для удобства просмотра. Для каждого различия поддерживается детализация в сетке результатов или в форме скрипта. Затем вы можете выборочно исключить отдельные различия.

Результаты сравнения вы можете сохранять в составе проекта базы данных SQL Server или в отдельном файле. Также вы можете задать параметры, управляющие областью сравнения и аспектами обновления. Затем вы можете сохранить сравнение, чтобы проще было повторить его с теми же параметрами или использовать в качестве отправной точки для нового сравнения.

Предупреждение

Если проект указан как целевой для сравнения, то максимальная поддерживаемая длина пути (не считая буквы диска, двоеточия и обратной косой черты) для проекта составляет 256 символов. Если путь к проекту превышает 256 символов, то все-таки есть возможность сравнить его схему со схемой базы данных или другого проекта. Однако в таком случае нельзя обновить его схему.

В следующей процедуре схема проекта базы данных сравнивается со схемой подключенной базы данных. В нем используются сущности, созданные в предыдущих процедурах в разделах "Управление таблицами, связями" и "Исправление ошибок" и "Разработка автономных баз данных для проектов".

Сравнение определений базы данных

  1. В меню "Сервис" выберите SQL Server и выберите "Создать сравнение схем".

    Также можно щелкнуть правой кнопкой мыши проект TradeDev в обозревателе решений и выбрать пункт Сравнение схем.

    Откроется окно Сравнение схем, и Visual Studio автоматически назначит сравнению имя, например SqlSchemaCompare1.

    Два раскрывающихся меню с зеленой стрелкой между ними отображаются непосредственно под панелью инструментов "Сравнение схем". Эти меню позволяют выбрать определения базы данных в качестве источника и цели сравнения.

  2. В раскрывающемся списке "Выбор источника " выберите "Выбрать источник ", а откроется диалоговое окно "Выбор исходной схемы ".

    Если вы открыли окно "Сравнение схем", щелкнув правой кнопкой мыши имя проекта, исходная схема уже заполнена, и вы можете перейти к шагу 4.

  3. Выберите вариант Проект, а затем выберите проект базы данных TradeDev, созданный в предыдущей процедуре.

  4. В раскрывающемся списке "Выбор целевого объекта" в окне "Сравнение схем" выберите "Выбрать целевой объект" и откроется диалоговое окно "Выбор целевой схемы". В разделе "Схема" выберите переключатель "База данных", а затем нажмите кнопку "Создать Подключение".

  5. В диалоговом окне Свойства соединения введите имя сервера, на котором размещается база данных TradeDev, и проверьте правильность введенных учетных данных для аутентификации. Затем выберите TradeDev в Подключение в базу данных и нажмите кнопку "ОК".

    Вы также можете выбрать кнопку "Параметры" на панели инструментов "Сравнение схем", чтобы указать, какие объекты сравниваются, какие типы различий игнорируются, а также другие параметры.

  6. Нажмите кнопку "Сравнить" на панели инструментов "Сравнение схем", чтобы запустить процесс сравнения.

    Когда сравнение будет завершено, структурные различия между проектом и базой данных отобразятся на панели Результаты в верхней части окна. По умолчанию в результатах сравнения все различия группируются по действию (удалить, изменить или добавить). На панели Результаты отображается строка для каждого объекта базы данных, который различается в двух определениях базы данных. Каждая строка определяет объект в исходной или целевой схеме и действие, которое нужно выполнить в целевой схеме, чтобы целевой объект стал идентичным исходному объекту. Если объект был рефакторингован и переименован или перемещен в новую схему, исходные и целевые имена отличаются, а имя источника отображается полужирным шрифтом, чтобы выделить разницу.

    По умолчанию список результатов скрывает объекты, одинаковые в обеих схемах или не поддерживаемые для обновления (например, встроенные объекты). Чтобы показать эти объекты, вы можете выбрать соответствующие кнопки фильтров на панели инструментов.

    Чтобы изменить порядок группирования, выберите раскрывающийся список Группировать результаты на панели инструментов. Выберите пункт Тип, чтобы сгруппировать результаты по типу объекта (например, по таблицам, представлениям или хранимым процедурам).

  7. Найдите таблицу Products в группе Tables. Выберите строку и исходные и целевые определения таблицы отображаются в области "Определения объектов" с выделенными различиями. Также можно развернуть строку таблицы Products на панели Результаты, чтобы проверить отдельные различающиеся элементы таблицы.

  8. По умолчанию все различия включаются в область действия «Обновить целевую схему». Можно исключить различия, которые не требуется синхронизировать. Для этого не проверка столбца Action в центре каждой строки. Кроме того, можно щелкнуть правой кнопкой мыши строку на панели "Схема" и выбрать пункт Исключить. Строка немедленно неактивна. Когда пора обновить целевую базу данных, эта строка не учитывается для каких-либо ожидающих изменений.

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

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

      При обновлении сравнения эти различия, которые вы решили пропустить, будут игнорироваться.

    • При использовании переменных SQLCMD средство сравнения схем использует локальные значения в свойствах проекта, а значения по умолчанию игнорируются. Дополнительные сведения см. в разделе "Проект базы данных" Параметры.

Чтобы обновить схему целевого объекта, у вас есть два варианта. Вы можете непосредственно обновить целевую схему в окне Сравнение схем, если целью является база данных или проект, или создать скрипт обновления, если целью является база данных или файл базы данных. Созданный скрипт появляется в редакторе Transact-SQL, где можно проверить выполнение скрипта в базе данных. В следующих процедурах эти возможности описаны подробно.

Предупреждение

Обновление завершится ошибкой, поскольку изменение подразумевает изменение типа столбца с NOT NULL на NULL, что приводит к потере данных. Если вы хотите продолжить обновление, нажмите кнопку "Параметры" (пятая из левой) на панели инструментов для сравнения схем и отмены проверка добавочного развертывания блока при потере данных.

Сравнение схем с моделью автоматизации Visual Studio

  1. Откройте меню "Вид", наведите указатель мыши на другие окна и выберите "Командное окно".

  2. Введите в окне команд следующую команду:

    Tools.SSDTNewSchemaComparison
    

Обновление непосредственно в окне "Сравнение схем"

  1. Нажмите кнопку "Обновить" на панели инструментов для окна "Сравнение схем".

  2. Проверьте созданный скрипт изменений. Этот скрипт вы можете сохранить с помощью меню «Файл/создать». Это может быть удобно для ситуаций, когда вы не авторизованы на обновление рабочей базы данных, в этом случае вы можете предоставить скрипт DBA для развертывания позже.

  3. Если у вас есть необходимое разрешение на обновление базы данных, нажмите кнопку "Выполнить запрос " на панели инструментов области редактирования, чтобы запустить скрипт.

Обновление по скрипту

  1. Нажмите кнопку "Создать скрипт " (четвертая из левой) на панели инструментов окна "Сравнение схем".

    Созданный скрипт откроется в новом окне редактора Transact-SQL.

    Предупреждение

    Только .dacpac файлы, созданные процессом моментального снимка SSDT, поддерживают это поведение. Вы не можете нацелить .dacpac файл, созданный средствами приложения уровня данных SQL (DAC) или платформой в настоящее время.

  2. Проверьте созданный скрипт изменений. Скрипт можно сохранить с помощью команды меню "Файл", "Сохранить" или "Сохранить как ".

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

    Также вы можете подключить редактор Transact-SQL к нужному серверу и непосредственно выполнить скрипт. Перед выполнением этой процедуры необходимо иметь необходимое разрешение на создание или обновление базы данных. Если у вас есть необходимое разрешение на обновление базы данных, нажмите кнопку "Выполнить запрос " на панели инструментов области редактирования, чтобы запустить скрипт.

  3. Нажмите кнопку Подключиться. Это действие подключается к текущему серверу или запрашивает ввод или выбор сервера в диалоговом окне Подключение на сервер. Имя базы данных определяется в скрипте как переменная команды.

  4. Проверьте скрипт и в случае необходимости измените переменные команды, которые определяют имя целевой базы данных, соответствующий префикс и пути к файлам.

  5. Нажмите кнопку "Выполнить" на панели инструментов области редактирования, чтобы запустить скрипт.

См. также