有没有办法在没有连接字符串的情况下调用 SSDT DacServices
Is there a way to call SSDT DacServices without a connectionstring
我有一个 Source DacPac 和一个 Target DacPac。使用 powershell 我想比较两者并生成升级脚本。只要存在有效的连接字符串,这本身对于 DacServices 的所有情况都很简单。但是,对于我的 CD 管道,我不知道最终的连接字符串,我也不希望知道。我想要的只是让脚本生成 SQL。
我用 sqlpackage.exe 尝试了这个,方法是发送如下参数
$args = @(
"/a:Script",
"/sf:$PathToDacpacSource",
"/tf:$PathToDacpacTarget",
"/op:$outputFile",
"/tdn:$TargetDatabaseName"
)
这很好用。到目前为止,我通过 [Microsoft.SqlServer.DacFx.x64] 只添加了对 DacServices 的依赖,但是没有连接字符串就无法生成脚本,这迫使我通过 [[=] 添加了对 SQLPackage.exe 的依赖29=]] 也是
DacServices 的构造函数都需要 ConnectionString
有没有人遇到过类似的情况,有什么解决办法吗?
或者您是否在部署端专门使用 SQLPackage 来解决这个问题?
有一个静态版本的 GenerateDeployScript 不需要连接字符串,因为您不需要为静态方法调用构造函数,在 msdn 文档中不是很清楚,但是 "S"看起来它是浮动的意味着它是静态的:)
` public static string GenerateDeployScript( DacPackage sourcePackage, DacPackage targetPackage, string targetDatabaseName, DacDeployOptions options = null )
我有一个 Source DacPac 和一个 Target DacPac。使用 powershell 我想比较两者并生成升级脚本。只要存在有效的连接字符串,这本身对于 DacServices 的所有情况都很简单。但是,对于我的 CD 管道,我不知道最终的连接字符串,我也不希望知道。我想要的只是让脚本生成 SQL。
我用 sqlpackage.exe 尝试了这个,方法是发送如下参数
$args = @(
"/a:Script",
"/sf:$PathToDacpacSource",
"/tf:$PathToDacpacTarget",
"/op:$outputFile",
"/tdn:$TargetDatabaseName"
)
这很好用。到目前为止,我通过 [Microsoft.SqlServer.DacFx.x64] 只添加了对 DacServices 的依赖,但是没有连接字符串就无法生成脚本,这迫使我通过 [[=] 添加了对 SQLPackage.exe 的依赖29=]] 也是
DacServices 的构造函数都需要 ConnectionString
有没有人遇到过类似的情况,有什么解决办法吗?
或者您是否在部署端专门使用 SQLPackage 来解决这个问题?
有一个静态版本的 GenerateDeployScript 不需要连接字符串,因为您不需要为静态方法调用构造函数,在 msdn 文档中不是很清楚,但是 "S"看起来它是浮动的意味着它是静态的:)
` public static string GenerateDeployScript( DacPackage sourcePackage, DacPackage targetPackage, string targetDatabaseName, DacDeployOptions options = null )