У меня есть база данных сервера 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, поэтому должен быть способ использовать эти данные впоследствии.
Или, может быть, сценарии после развертывания — единственный вариант?
Греттингс
Насколько я знаю, сценарии после развертывания — единственный готовый метод для версии данных. Вы можете использовать сравнение данных SSDT, чтобы помочь сгенерировать скрипты. Один метод, который я использовал, — это сценарий после развертывания, который вставляет все нужные данные во временную таблицу/переменную, а затем MERGE для соответствующего обновления окончательной таблицы.
@DanGuzman, так почему у вас есть эта опция Extract Schema and Data при извлечении DAC в проводнике объектов? Это должен быть способ использовать его как-то
@KarolŻurowski, этот параметр создает BACPAC, а не BACPAC только для схемы. BACPAC можно использовать для импорта приложения уровня данных, создавая новую базу данных с данными.
@DanGuzman Я не думаю, что ты прав. В моем случае он создал файл DACPACK. Если бы я выбрал только схему, я мог бы легко импортировать ее с помощью опции Extract ... Если я выберу схему+данные, извлечение вызовет ошибку
@KarolŻurowski, похоже, что опция DACPAC с включенными данными была представлена в VS 2012 (эта опция недоступна в SSMS). Я не верю, что такой DACPAC может быть создан непосредственно как артефакт сборки проекта SSDT; только путем реинжиниринга (извлечения) существующей физической базы данных. Таким образом, вы можете развернуть схему и данные (с помощью сценария после развертывания), а затем извлечь новый DACPAC с помощью обоих. См. этот связанный ответ.
@DanGuzman Хорошо, я понял. Но как я могу использовать этот «DACPAC с обоими» - схемой и данными





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