【问题标题】:SSDT Post Deployment Script - Run All Scripts In FolderSSDT 部署后脚本 - 运行文件夹中的所有脚本
【发布时间】:2015-02-17 12:45:06
【问题描述】:

我在一个 SQL 项目中有一个 PostDeployment 脚本,该脚本在发布时会在该项目中运行许多其他脚本:

:r .\Scripts\Script1.sql 
:r .\Scripts\Script2.sql 
:r .\Scripts\Script3.sql 
:r .\Scripts\Script4.sql

每次将新脚本添加到源代码控制 (TFS) 中的 Scripts 文件夹时都不必手动更新,是否可以只迭代并执行 Scripts 文件夹中的所有 SQL 脚本?

【问题讨论】:

  • 我实际上设法让它在我的项目中工作,在每次构建时自动包含指定文件夹中的所有 sql-scripts,无需手动将它们包含在 post-script 文件中,它现在自动完成.在包含的项目文件中使用 msbuild 命令!

标签: c# visual-studio deployment tfs sql-server-data-tools


【解决方案1】:

将此添加到您的项目文件中

 <ItemGroup>
    <DataScripts Include="Data\*.sql" />
 </ItemGroup>
 <Target AfterTargets="BeforeBuild" Name="CreateDataScript">
    <Delete Files="DataScript.sql" />
    <WriteLinesToFile Overwrite="false" File="DataScript.sql" Lines=":r .\%(DataScripts.Identity)" />
 </Target>

DataScripts 属性是包含您要运行的所有 sql 脚本的文件夹。这会在您进行构建之前生成文件,因此您可以在部署后脚本中引用它而不会出现类似问题。

:r .\DataScript.sql

这可用于动态生成可在部署前/部署后脚本中引用的脚本

【讨论】:

    【解决方案2】:

    这并不是真正的执行,而是包含脚本文件。因此,您必须编辑文件以添加所有文件的行。这也许可以使用 xmlpoke 命令来完成。您必须编辑项目文件并添加循环文件夹中所有文件并为每个文件添加包含语句的代码。

    【讨论】:

    【解决方案3】:

    如果您需要继续操作它,那么您很可能错误地使用了 SSDT。 SSDT 是基于模式的版本控制系统,而不是基于脚本的系统。

    如果你想要一个传统的脚本系统,那么你应该看看 Ready Roll 或 SSW SQL Deploy。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-30
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多