我知道如何在cmd文件中设置变量,该文件通过sqlcmd将变量传递给SQL。
示例:
sqlcmd -Usa -Ppass -d MASTER -v num="%num%" -i C:\scriptfile我的问题是,如何在SQL中定义一个可以在SQL外部读取的变量。我知道如何在SQL脚本中声明和定义@variables,但是在SQL脚本运行的外部无法识别这些变量。
我的问题是如何将SQL中的变量传递回cmd?
有什么办法可以做到这一点吗?
谢谢
发布于 2014-11-20 07:03:09
您可以使用脚本变量和SQLCMD实用程序的-v选项来完成此操作。来自 MSDN Documentation的一个小示例
假设脚本文件名为testscript.sql,Col1是一个脚本变量;您的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发布于 2014-11-21 04:57:47
谢谢Rahul,你无意中回答了我的问题。您可以通过SQLCMD的-o选项将脚本结果输出到文件。
考虑到这一点,我意识到我可以使用PRINT SQL创建一个-o .cmd文件,其中包含用于定义变量的.cmd语法。然后在.cmd文件中,我告诉它运行SQL创建的.cmd文件,然后在.cmd环境中定义变量。
有点绕圈子,但很管用!
谢谢!
发布于 2014-11-21 22:24:19
如果您只运行一个简单的select命令来获取您的值,或者运行一个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
https://stackoverflow.com/questions/27028535
复制相似问题