【问题标题】:Variable defined in SQL readable by .cmd (pass a variable from SQL to cmd).cmd 可读的 SQL 中定义的变量(将变量从 SQL 传递到 cmd)
【发布时间】:2014-11-19 22:49:52
【问题描述】:

我知道如何在通过 sqlcmd 将变量传递给 SQL 的 cmd 文件中设置变量。

例子:

sqlcmd -Usa -Ppass -d MASTER -v num="%num%" -i C:\scriptfile

我的问题是如何在 SQL 中定义一个可以在 SQL 之外读取的变量。我知道如何在 SQL 脚本中声明和定义 @variables,但在 SQL 脚本运行时无法识别这些变量。

我的问题是如何将变量从 SQL 传递回 cmd?

有没有办法做到这一点?

谢谢

【问题讨论】:

  • 也许this 可以提供帮助。最后,您需要在批处理文件的 sqlcmd 调用中输出值以检索它。

标签: sql-server variables batch-file cmd


【解决方案1】:

您可以使用脚本变量和SQLCMD 实用程序的-v 选项来执行此操作。来自 MSDN Documentation的一个小例子

考虑脚本文件名为testscript.sqlCol1是一个脚本变量;你的 SQL 脚本看起来像

USE test;

SELECT x.$(Col1) FROM Student x WHERE marks < 5;

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

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

类似于下面的查询

SELECT x.FirstName FROM Student x WHERE marks < 5;

编辑:

如果您只想从脚本文件中捕获输出,则可以使用-o 参数并指定类似的输出文件

sqlcmd -v Col1 = "FirstName" -i c:\testscript.sql -o output.txt

【讨论】:

  • 谢谢,我明白了。您的示例是将变量从 cmd 传递给 sql。我的问题是如何将变量从 SQL 传递给 cmd?
【解决方案2】:

谢谢拉胡尔,你无意中回答了我的问题。您可以通过 SQLCMD 的 -o 选项将脚本结果输出到文件。

考虑到这一点,我意识到我可以使用 PRINT SQL 创建一个 -o .cmd 文件,其中包含用于定义变量的 .cmd 语法。然后在 .cmd 文件中,我告诉它运行 SQL 创建的 .cmd 文件,然后在 .cmd 环境中定义变量。

有点绕路,但有效!!

谢谢!

【讨论】:

    【解决方案3】:

    如果你只是运行一个简单的选择来获取你的值或一个只返回你所追求的值的 exec spname,你可以使用以下。

    for /f "tokens=*" %a in ('sqlcmd -Usa -Ppass -W -h -1 -d MASTER -Q "select Column from table"') do set ResultVariable=%a
    

    如果将其放入 bat 文件中,请记住使用 %%a

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-16
      • 2012-11-07
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多