Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL readable by.cmd中定义的变量(将变量从SQL传递到cmd)_Sql Server_Variables_Batch File_Cmd - Fatal编程技术网

Sql server 在SQL readable by.cmd中定义的变量(将变量从SQL传递到cmd)

Sql server 在SQL readable by.cmd中定义的变量(将变量从SQL传递到cmd),sql-server,variables,batch-file,cmd,Sql Server,Variables,Batch File,Cmd,我知道如何在cmd文件中设置一个变量,通过sqlcmd将变量传递给SQL 例如: sqlcmd -Usa -Ppass -d MASTER -v num="%num%" -i C:\scriptfile 我的问题是如何在SQL中定义一个可以在SQL之外读取的变量。我知道如何在SQL脚本中声明和定义@variables,但这些变量在SQL脚本运行时无法识别 我的问题是如何将变量从SQL传递回cmd 有没有办法做到这一点 谢谢您可以使用脚本变量和SQLCMD实用程序的-v选项来完成此操作。来自中国

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

例如:

sqlcmd -Usa -Ppass -d MASTER -v num="%num%" -i C:\scriptfile
我的问题是如何在SQL中定义一个可以在SQL之外读取的变量。我知道如何在SQL脚本中声明和定义@variables,但这些变量在SQL脚本运行时无法识别

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

有没有办法做到这一点


谢谢

您可以使用脚本变量和SQLCMD实用程序的-v选项来完成此操作。来自中国的一个小例子

假设脚本文件名为testscript.sql,Col1是一个脚本变量;您的SQL脚本看起来像

USE test;

SELECT x.$(Col1) FROM Student x WHERE marks < 5;
这将类似于下面的查询

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

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

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

这是一种迂回的方式,但很有效


谢谢

如果您只是运行一个简单的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

谢谢,我理解这一点。您的示例是将变量从cmd传递到sql。我的问题是如何将一个变量从SQL传递到cmd?可能会有所帮助。最后,您需要在sqlcmd调用中输出值,以便批处理文件检索该值。
sqlcmd -v Col1 = "FirstName" -i c:\testscript.sql -o output.txt
for /f "tokens=*" %a in ('sqlcmd -Usa -Ppass -W -h -1 -d MASTER -Q "select Column from table"') do set ResultVariable=%a