gpt4 book ai didi

sql - 使用 SQLCMD 的 PostDeployment.sql 脚本中的条件逻辑

转载 作者:太空狗 更新时间:2023-10-30 01:37:50 25 4
gpt4 key购买 nike

我正在使用 SQL 2008 数据库项目(在 Visual Studio 中)来管理我的项目的架构和初始测试数据。 atabase 项目使用后期部署,其中包括许多使用 SQLCMD 的“:r”语法的其他脚本。

我希望能够根据 SQLCMD 变量有条件地包含某些文件。这将允许我通过夜间构建多次运行该项目,以设置具有不同数据配置的各种版本的数据库(对于 Multi-Tenancy 系统)。

我尝试了以下方法:

IF ('$(ConfigSetting)' = 'Configuration1')
BEGIN
print 'inserting specific configuration'
:r .\Configuration1\Data.sql
END
ELSE
BEGIN
print 'inserting generic data'
:r .\GenericConfiguration\Data.sql
END

但是我得到一个编译错误:SQL01260:发生致命解析器错误:Script.PostDeployment.sql

有没有人看到这个错误或设法以这种方式配置他们的部署后脚本以使其灵活?还是我完全以错误的方式解决了这个问题?

谢谢,罗布

附言我也试过改变它,使文件的路径是一个变量,similar to this post .但这给了我一个错误,说路径不正确。

最佳答案

更新

我现在发现上面的 if/else 语法对我不起作用,因为我的一些链接脚本需要 GO 语句。基本上 :r 只是内联导入脚本,所以这变成了无效的语法。

如果您需要链接脚本中的 GO 语句(就像我一样),那么没有任何简单的方法可以解决这个问题,我最终创建了几个部署后脚本,然后更改我的项目以覆盖主要的部署后脚本构建时间取决于构建配置。这现在正在做我需要的,但似乎应该有更简单的方法!

对于任何需要同样东西的人 - I found this post useful

所以在我的项目中我有以下部署后文件:

  • Script.PostDeployment.sql(将被替换的空文件)
  • Default.Script.PostDeployment.sql(链接到标准数据配置所需的脚本)
  • Configuration1.Script.PostDeployment.sql(链接到特定数据配置所需的脚本)

然后我将以下内容添加到项目文件的末尾(右键单击卸载然后右键单击编辑):

  <Target Name="BeforeBuild">
<Message Text="Copy files task running for configuration: $(Configuration)" Importance="high" />
<Copy Condition=" '$(Configuration)' == 'Release' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
<Copy Condition=" '$(Configuration)' == 'Debug' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
<Copy Condition=" '$(Configuration)' == 'Configuration1' " SourceFiles="Scripts\Post-Deployment\Configuration1.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
</Target>

最后,您需要在解决方案中设置匹配的构建配置。

此外,对于任何尝试其他解决方法的人,我也尝试了以下但没有任何运气:

  1. 创建后期构建事件来复制文件,而不必破解项目文件 XML。我无法让它工作,因为我无法形成部署后脚本文件的正确路径。 This connect issue describes the problem

  2. 使用脚本路径变量传递给 :r 命令。但是我用这种方法遇到了几个错误。

关于sql - 使用 SQLCMD 的 PostDeployment.sql 脚本中的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com