Управление версиями базы данных SQL Server с данными с использованием SSDT

У меня есть база данных сервера sql, уже содержащая данные. Я хочу начать его версию. Я знаю, что могу использовать проект базы данных в Visual Studio, и, импортируя базу данных, я могу создавать сценарии sql.

Но как насчет данных в базе данных? Я попытался создать несколько файлов приложений уровня данных, но когда я пытаюсь импортировать их в свой проект БД в Visual Studio, я получаю эту ошибку:

Import Data-Tier Application File - This operation is not supported for packages containing data

Итак, как мне импортировать данные? Это должно быть каким-то образом, потому что, когда я извлекаю файл DAC, есть опция Extract Schema and Data, поэтому должен быть способ использовать эти данные впоследствии.

Или, может быть, сценарии после развертывания — единственный вариант?

Греттингс

Ведение истории версий Я считаю, что это может быть полезно. Вы можете использовать powershell для развертывания своих баз данных, вам нужно установить переключатели на: /p:BuildVersion=$(BuildLabel)
otri 20.03.2019 11:05

Насколько я знаю, сценарии после развертывания — единственный готовый метод для версии данных. Вы можете использовать сравнение данных SSDT, чтобы помочь сгенерировать скрипты. Один метод, который я использовал, — это сценарий после развертывания, который вставляет все нужные данные во временную таблицу/переменную, а затем MERGE для соответствующего обновления окончательной таблицы.

Dan Guzman 20.03.2019 11:15

@DanGuzman, так почему у вас есть эта опция Extract Schema and Data при извлечении DAC в проводнике объектов? Это должен быть способ использовать его как-то

karollo 20.03.2019 11:21

@KarolŻurowski, этот параметр создает BACPAC, а не BACPAC только для схемы. BACPAC можно использовать для импорта приложения уровня данных, создавая новую базу данных с данными.

Dan Guzman 20.03.2019 11:31

@DanGuzman Я не думаю, что ты прав. В моем случае он создал файл DACPACK. Если бы я выбрал только схему, я мог бы легко импортировать ее с помощью опции Extract ... Если я выберу схему+данные, извлечение вызовет ошибку

karollo 20.03.2019 11:46

@KarolŻurowski, похоже, что опция DACPAC с включенными данными была представлена ​​​​в VS 2012 (эта опция недоступна в SSMS). Я не верю, что такой DACPAC может быть создан непосредственно как артефакт сборки проекта SSDT; только путем реинжиниринга (извлечения) существующей физической базы данных. Таким образом, вы можете развернуть схему и данные (с помощью сценария после развертывания), а затем извлечь новый DACPAC с помощью обоих. См. этот связанный ответ.

Dan Guzman 20.03.2019 12:29

@DanGuzman Хорошо, я понял. Но как я могу использовать этот «DACPAC с обоими» - схемой и данными

karollo 20.03.2019 13:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
868
1

Ответы 1

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

Другие пытались включить справочные данные, но решить эту проблему так, чтобы она устраивала всех, довольно сложно. Я знаю, что другие, такие как Эд Эллиотт, написали некоторые вещи, которые могут включать и выключать их по мере необходимости, поэтому вы не всегда включаете все справочные данные каждый раз. Вы также можете изучить сценарий пост-после-развертывания, в котором после публикации и пост-развертывания вы запускаете отдельный скрипт, который обновляет данные из статических файлов. Они по-прежнему будут находиться в системе контроля версий, но не обязательно будут частью вашего проекта SSDT. Однако вам нужно будет не забыть запустить этот скрипт в своих сборках.

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

Другие вопросы по теме