【发布时间】:2014-03-04 20:30:02
【问题描述】:
在 VS 2013 中,有两个针对同一数据库的 SSDT 复合项目:
- 第一个项目负责目标数据库本身。
- 2nd project有1st project的数据库引用,负责目标数据库中的测试数据。
当我部署第二个项目时,我只想根据需要更新目标数据库,从不删除/创建它。
为了部署第二个项目,我尝试使用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" 意味着我不会在BlahTest.sql 中找到DROP DATABASE 或CREATE DATABASE;但无论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 输出不删除/创建目标数据库的脚本?
【问题讨论】:
-
您可以在发布配置文件中执行此操作吗?我将我的一个配置文件设置为始终创建数据库(“新”配置文件),而所有其他配置文件都设置为不这样做。我没有经常使用直接命令行,但想知道您是否需要双引号来表示“False”才能使其工作。
-
@PeterSchott:好问题。是的,当我使用 VS 项目中的配置文件发布时,我能够(不)根据需要删除/创建 - 只是不在
SqlPackage.exe第二个项目的脚本输出中。
标签: deployment visual-studio-2013 sql-server-data-tools