【问题标题】:Is there batch script command where I can change variable values in a .sql file?是否有批处理脚本命令可以更改 .sql 文件中的变量值?
【发布时间】:2013-02-06 22:13:57
【问题描述】:

我正在创建一个批处理文件,我在其中从 IP 地址恢复数据库,然后在数据库上执行几个 .sql 文件。在几个 .sql 文件中,声明和设置了变量。但是这个过程必须在许多机器上完成,每台机器的每个变量都有不同的值。

所以我可以通过用户输入 IP 来恢复数据库,但我不确定如何使用批处理脚本命令来更改变量值。

例如,在其中一个 .sql 文件中,声明了一个变量 @store 并将其设置为某个随机数。我想通过批处理文件更改该数字。

我正在使用 windows 和 sql server express 2008 r2

【问题讨论】:

    标签: sql sql-server batch-file sqlcmd


    【解决方案1】:

    您可以将"scripting variables" 与 SQLCMD 一起使用。

    这是该 MSDN 页面中的一个示例:

    您还可以使用 -v 选项来设置脚本中存在的脚本变量。在以下脚本中(文件名为 testscript.sql),ColumnName 是一个脚本变量。

    USE AdventureWorks2012;
    SELECT x.$(ColumnName)
    FROM Person.Person x
    WHERE c.BusinessEntityID < 5;

    然后您可以使用 -v 选项指定要返回的列的名称:

    sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql

    要使用相同的脚本返回不同的列,请更改 ColumnName 脚本变量的值。

    sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql

    【讨论】:

      【解决方案2】:

      如果您在 Unix / Linux 系统上工作,您可以使用sed 来搜索字符串。

      示例:假设需要将127.0.0.1替换为192.168.1.1,可以使用如下指令:

      $ sed 's/127.0.0.1/192.168.1.1/g' script.sql > newScript.sql
      

      这将替换 script.sql 中的旧 IP,并将此脚本的副本保存在 newScript.sql 中。

      在 Windows 上,我不知道该怎么做,但您可以随时下载并安装 Cygwin 以完全按照上述操作。

      希望对你有所帮助。

      【讨论】:

      • Cygwin 绝对不需要在 Windows 中获取 GNU/Linux 工具。它们有几个本地端口不需要 Cygwin
      • @a_horse_with_no_name 你知道在 windows 中使用 sed 的另一种方法吗?\
      • @a_horse_with_no_name 你能和我们分享一下吗?我是 Linux 用户(和粉丝),但如果你知道这些工具会很好
      猜你喜欢
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2021-07-29
      • 2011-09-10
      相关资源
      最近更新 更多