- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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
所以在我的项目中我有以下部署后文件:
然后我将以下内容添加到项目文件的末尾(右键单击卸载然后右键单击编辑):
<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>
最后,您需要在解决方案中设置匹配的构建配置。
此外,对于任何尝试其他解决方法的人,我也尝试了以下但没有任何运气:
创建后期构建事件来复制文件,而不必破解项目文件 XML。我无法让它工作,因为我无法形成部署后脚本文件的正确路径。 This connect issue describes the problem
使用脚本路径变量传递给 :r 命令。但是我用这种方法遇到了几个错误。
关于sql - 使用 SQLCMD 的 PostDeployment.sql 脚本中的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151021/
我希望将 SQL 查询 Select count(*) from Table 的输出用作批处理脚本中的变量。我正在使用 sqlcmd 来执行此查询,但还没有想出如何正确执行此操作。 如有任何帮助或示例
我正在使用 powershell 并使用 Invoke-SqlCmd .我能够将变量传递给 SQL: $variables = @( "MyVariable='hello'" ) Invoke-Sql
我在调用 Invoke-SqlCmd 时遇到问题,因为它包含第二个 Invoke-SqlCmd 调用: function Get-Foo { $query=` @" WITH data AS (
我正在使用 sqlpackage.exe 部署 dacpac,需要为 dacpac 中的部署后脚本传递 SqlCMD 变量。我发现了一个相关问题here和 here . 但是我收到以下错误:以下 Sq
我正在使用 sqlpackage.exe 部署 dacpac,需要为 dacpac 中的部署后脚本传递 SqlCMD 变量。我发现了一个相关问题here和 here . 但是我收到以下错误:以下 Sq
我可以找到的所有文档和帮助线程都包含带有 Authentication=ActiveDirectoryIntegrated 的引用连接字符串,以便通过 AAD 集成命中 SQL。如果我使用的是 SSM
我有一个运行多个 *.sql 文件的批处理文件。目前,所有变量都已硬编码在 sql 文件中。我想知道如何从 SQLCMD 批处理文件中传递变量值。 变量名示例: DECLARE @TW_FROM DA
我正在使用 SQLCMD 运行一个 270 MB 的 .sql 文件。脚本文件 (.sql) 是使用 Red Gate SQL 数据比较同步向导生成的。由于内存不足,我无法从 SSMS 运行它。我登录
我以这种方式使用 sqlcmd 执行一些命令行批处理 (.bat): sqlcmd -i Scripts\STEP01.sql -o PROCESS.log -S MYSERVER -E -d MYD
在我的部署后脚本中,我想使用这样的通配符将所有脚本文件包含在一个文件夹中: :r .\$(ReleaseName)\*.sql 有没有办法做到这一点?我找不到任何.. 最佳答案 我让它工作: ':r
所以这是我想要运行的查询 sqlcmd -E -S localhost\MSSQLSERVER_2016 -i C:\Tables.sql 在这个实例中我有多个数据库,当上面的命令运行时,我不知道它针
我正在尝试在运行 SQL Server 2005 的 Windows 计算机上使用 sqlcmd 将查询写入 csv 文件。我们通常使用的命令行选项是: -l 60 -t 300 -r 1 -b -W
我正在尝试使用 sqlcmd 来执行一些 SQL 脚本。 使用带有简单查询的测试命令,例如: sqlcmd -S HOSTNAME -d MYDATABASE -Q 'SELECT Names FRO
我正在使用以下代码在远程机器上执行查询。 Invoke-Sqlcmd -ServerInstance $serverInstance -Database $dbName -InputFile $fil
我已经调用了许多.sql文件的fetchDb.bat文件 将数据库升级到最新版本 这是用于执行.sql文件内容的命令 sqlcmd %Sqlinstance% -d DataBase -i "file
我在一个文件夹的多个文本文件中有TSQL插入语句。我需要在Powershell中使用foreach循环在sql服务器上运行。它应该转到文件夹中的每个文件,读取执行查询并再次终止连接,再读取下一个文件,
我们在使用 Powershell 和 SQLCMD 时遇到问题,当 -v 参数变量中有空间时,powershell 将无法运行命令。 例如 sqlcmd ... -v VAR="Some space"
我有一个简单的 SQLCMD 脚本,其中包含如下几行: /* Load data into Exampletable */ BULK INSERT dbo.Example /* NOTE: I
如何根据系统日期将输出文本文件命名为 YYYYMMDD? sqlcmd -S DataBBB -i c:\scripts\followup.sql -o %DATE:~4,2%_%DATE:~
我刚刚通过Chocolatey重新安装了SQL Server Express 2014。该服务当前正在运行。 当我在CMD或Powershell中运行此命令时: > sqlcmd -e -S .\SQ
我是一名优秀的程序员,十分优秀!