Сборка проекта сгенерирует файл .dacpac, который будет использоваться для развертывания.
Можно использовать командный инструмент 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
/CMD
/Вариаблес:Моде=ЛОКАЛ
Примеры линий деплоя CMD
Деплой к центральному 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
/*Проверьте версию, чтобы избежать повторного обновления*/
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. При развертывании в SQL 2005 может возникнуть нижеуказанное исключение. Просто игнорируйте его и повторите попытку.
Ошибка SQL72014: Net SqlClient Data Provider: Msg 2812, Level 16, State 62, Line 1 ~b
N0RX[�PǏz 'sp_refreshsqlmodule'0
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )