1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/RichAndyZ-SsdtSample

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
Readme.md

Базовый проект управления базами данных

Build

Сборка проекта сгенерирует файл .dacpac, который будет использоваться для развертывания.

Deploy

Можно использовать командный инструмент SqlPackage.exe для развертывания.

Этот инструмент можно найти в пути типа "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe". При установке SQL сервера пожалуйста включите функцию SQL Server Development Tools (SSDT).

На данный момент кажется, что есть проблема с Visual Studio, файл пакета не может быть выполнен предыдущей версией SqlPackage.exe. Мы можем использовать NuGet пакет https://www.nuget.org/packages/Microsoft.Data.Tools.MSBuild для последней версии SqlPackage. Для удобства доступа мы создали проект SqlPackageNugetReference, который скачает этот пакет.

Примеры вызова команд:

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

SqlPackage.exe /Action:DeployReport /SourceFile:. \db.dacpac /Profile:. \db.publish.xml /OutputPath:. \ChangesToDeploy.xml /TargetPassword:xxxx
```#### Если всё хорошо, разверните ваши изменения следующей командой. Возможно потребуется включить другие опции.
```CMD
SqlPackage.exe /Action:Publish /SourceFile:. \db.dacpac /Profile:. \
``pubликh. xml /ТаргетПассворд:xxxx
  • Указан параметр SQLCMD, если требуется, как пример:
/CMD
    /Вариаблес:Моде=ЛОКАЛ
  • Примеры линий деплоя CMD

    • Указан правильный пассворд. И вам может потребоваться установить 'БлокОнПоcсibleДаТаЛосс' в False, если вы делаете какие-то изменения схемы таблицы, такие как alter column.

    Деплой к центральному SQL серверу

        . \SqlПаккаге\sqqlpаккаге. exe /Акция:Публиш /СоурсФайл:./DataСервисDB. dacpac /ТаргетСерверНазвание:xxx /ТаргетДаТаБазаНазвание:XXX /ТаргетУсер:sa /ТаргетПассворд:xxx /Вариаблес:Моде=РЕМОТЭ /п:БлокОнПоcсibleДаТаЛосс=True

    Деплой к SQL Express 2012 c ЛОКАЛ моде

        . \SqlПаккаге\sqqlpаккаге. exe /Акция:Публиш /СоурсФайл:./DataСервисDB. dacpac /ТаргетСерверНазвание:xxx\SQl2012,1433 /ТаргетДаТаБазаНазвание:XXX /ТаргетУсер:sa /ТаргетПассворд:XXX /Вариаблес:Моде=ЛОКАЛ /п:БлокОнПоcсibleДаТаЛосс=False

Notes

  1. По умолчанию он контролирует только изменения схемы БД.В настоящее время мы используем свою таблицу версий данных для управления версией данных после развертывания скрипта.
  2. Можно создать проект, импортировав существующую базу данных или скрипт-файл.
  3. Должна быть только одна пред- или пост-развертывание скрипт. Однако это может включать несколько скриптов для неразработанных элементов. Также вам нужно включить режим SQLCMD, выбрав меню "SQL" -> "Настройки выполнения" -> "Режим SQLCMD".Пример файла сценария ссылки, он имеет контроль версий, чтобы гарантировать, что файл запускается только один раз:
/*Проверьте версию, чтобы избежать повторного обновления*/
DECLARE @versionId NVARCHAR(50);
SELECT @versionId = 'Version1';
IF EXISTS (
    SELECT VersionId 
    FROM __DataVersion 
    WHERE VersionId = @versionId
)
BEGIN
    PRINT @versionId + ' уже применено. Пропустить.';
    RETURN;
END;

/*Разрешите запуск сценария только при указанном режиме, режим определяется как глобальная переменная SQLCMD.*/
--Разрешите его развертывание только в локальном режиме
IF ('$(Mode)' <> 'LOCAL')
BEGIN
    PRINT 'Не требуется развернуть ' + @versionId + ' для $(Mode) режима.';
    RETURN;
END;

BEGIN TRY
    BEGIN TRANSACTION;
        /*Вставляем версию первым*/
        INSERT INTO __DataVersion (VersionId, [State], Note) 
        VALUES (@versionId, 'processing', 'Version1 Desc');

        /*Обрабатываем изменения данных здесь*/
        --**Замените код здесь***--

    PRINT @versionId + ' завершено';
END TRY;
```Внимание: Вставка замечаний внутри синтаксиса SQLCMD была приведена для примера и должна быть адаптирована в соответствии с реальной бизнес-логикой.
```sql
/* Обновление состояния версии данных в последний момент */
UPDATE __DataVersion SET [State] = 'finished' WHERE VersionId = @versionId

COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT @versionId + ' failed'
DELETE FROM __DataVersion WHERE VersionId = @versionId

DECLARE 
    @ErrorMessage NVARCHAR(4000),
    @ErrorSeverity INT,
    @ErrorState INT;

SELECT 
    @ErrorMessage = ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE();

RAISERROR (
    @ErrorMessage,
    @ErrorSeverity,
    @ErrorState
);
END CATCH
  1. Важные правила для обновления БД:
  • Не удаляйте объекты базы данных, такие как таблицы, представления, столбцы. Если вы всё же хотите это сделать, пожалуйста, убедитесь, что также модифицировали все сценарии после развертывания, использующие этот объект, иначе свежее развертывание может завершиться ошибкой.
  • Если вы хотите добавить новый столбец в существующую таблицу, обычно полезно иметь значение по умолчанию для него. Либо вам также следует позаботиться о существующих сценариях ссылок для свежего развертывания.*
## Известные проблемы
```1. При развертывании в SQL 2005 может возникнуть нижеуказанное исключение. Просто игнорируйте его и повторите попытку.

Ошибка SQL72014: Net SqlClient Data Provider: Msg 2812, Level 16, State 62, Line 1 ~b
N0RX[�PǏz 'sp_refreshsqlmodule'0

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Пример проекта для SSDT, который используется для контроля изменений БД для SQL Server. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/RichAndyZ-SsdtSample.git
git@api.gitlife.ru:oschina-mirror/RichAndyZ-SsdtSample.git
oschina-mirror
RichAndyZ-SsdtSample
RichAndyZ-SsdtSample
master