在VS 2013中,有两个针对同一数据库的SSDT复合项目:
当我部署第二个项目时,我只想要根据需要更新目标数据库,永远不会删除/创建它。
要部署第二个项目,我尝试按如下方式使用SqlPackage.exe
来生成部署脚本:
C:\some\directory\ssdt\sqlpackage.exe ^
/a:Script ^
/op:".\BlahTest.sql" ^
/sf:".\BlahTest.dacpac" ^
/tsn:"localhost" ^
/tdn:"BlahTest" ^
/p:CreateNewDatabase="False" ^
REM ...
我希望/p:CreateNewDatabase="False"
表示我在DROP DATABASE
中找不到CREATE DATABASE
或BlahTest.sql
;但无论CreateNewDatabase
属性如何(即设置为"False"
,设置为"True"
或省略),我都会看到以下内容:
USE [master];
GO
IF (DB_ID(N'$(DatabaseName)') IS NOT NULL)
BEGIN
ALTER DATABASE [$(DatabaseName)]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [$(DatabaseName)];
END
GO
PRINT N'Creating $(DatabaseName)...'
GO
CREATE DATABASE [$(DatabaseName)]
ON
PRIMARY(NAME = [$(DatabaseName)], FILENAME = N'$(DefaultDataPath)$(DefaultFilePrefix)_Primary.mdf')
LOG ON (NAME = [$(DatabaseName)_log], FILENAME = N'$(DefaultLogPath)$(DefaultFilePrefix)_Primary.ldf') COLLATE SQL_Latin1_General_CP1_CI_AS
GO
如何让SqlPackage.exe
输出不删除/创建目标数据库的脚本?
答案 0 :(得分:1)
CreateNewDatabase标志只是确定是否总是执行完全删除并在发布时重新创建 - 也许SqlPackage.exe文档对此不够清楚?它声明CreateNewDatabase“指定是否应更新目标数据库,或者在发布到数据库时是否应删除并重新创建目标数据库。”假设如果您选择发布,则无论如何都要创建数据库。
使用SqlPackage.exe无法实现您想要的功能,但编写自己的代码非常容易。有关数据库是否存在,请参阅this answer on how to check if a database exists以获取示例代码检查。如果CheckDatabaseExists为true,您可以编写执行此检查的powershell脚本并调用SqlPackage.exe。