Sql 将标量查询结果返回到批处理文件变量中

Sql 将标量查询结果返回到批处理文件变量中,sql,sql-server,batch-file,Sql,Sql Server,Batch File,我希望执行标量数据库查询,并将结果返回到批处理文件中的变量中 你会怎么做?在我们的系统中,我看到的最接近I的例子是,如果我基于标量查询结果返回一个退出代码 Z:\SQL2005\90\Tools\Binn\sqlcmd -S servername -dCLASS -E -Q "EXIT(select case run_type when 'Q' then 200 else 100 end from cycle_date where cycle = '1')">NUL if

我希望执行标量数据库查询,并将结果返回到批处理文件中的变量中

你会怎么做?在我们的系统中,我看到的最接近I的例子是,如果我基于标量查询结果返回一个退出代码

    Z:\SQL2005\90\Tools\Binn\sqlcmd -S servername -dCLASS -E -Q "EXIT(select case run_type when 'Q' then 200 else 100 end from cycle_date where cycle = '1')">NUL
    if %errorlevel% == 200 call %SQLSERVER%
QRTLY.BAT               
    if %errorlevel% == 100 call %SQLSERVER%
MTHLY.BAT
有人能帮我解释一下语法吗

以下是一些sqlcmd帮助信息:

-v var = value[ var=value...] 
Creates a sqlcmdscripting variable that can be used in a sqlcmd script. Enclose the value in quotation marks if the value contains spaces. You can specify multiple var="values" values. If there are errors in any of the values specified, sqlcmd generates an error message and then exits.

sqlcmd -v MyVar1=something MyVar2="some thing" 

sqlcmd -v MyVar1=something -v MyVar2="some thing" 

-x disable variable substitution 
Causes sqlcmd to ignore scripting variables. This is useful when a script contains many INSERT statements that may contain strings that have the same format as regular variables, such as $(variable_name).

你看了吗?

把它保存到一个没有标题的文件中,然后把内容读回怎么样

sqlcmd -S(local)\SQLExpress -dMyDatabase -Umyuser -Pmypassword -W -h -1 -Q  "SELECT Top 1 MyValue FROM MyTable" -o sqlcmdoutput.txt 
set /p x= <sqlcmdoutput.txt
del sqlcmdoutput.txt
echo My scalar value is %x%
sqlcmd-S(本地)\SQLExpress-dMyDatabase-Umyuser-Pmypassword-W-h-1-Q“从MyTable中选择前1个MyValue”-o sqlcmdoutput.txt

set/px=我在批处理文件中使用它。它返回SQL Server数据库数据文件的LogicalFilename。这仅在数据库中有一个数据文件时有效

因此,结果是环境变量DATABASEFILENAME被设置为AdventureWorks_Data

FOR /F "usebackq tokens=1" %%i IN (`sqlcmd -w200 -h-1 -E -Q"set nocount on; Select df.name  From sysdatabases as d Inner Join sysaltfiles as df on d.dbid=df.dbid Where d.name ='$(DatabaseName)' and df.Fileid =1"`) DO set DATABASEFILENAME=%%i

是的,但我需要语法方面的帮助。你的答案看起来不错。只有一个后续问题:我希望完全限定sqlcmd的路径,例如,设置sqlcmd=“C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe”,但当我这样做时,我得到“文件名、目录名或卷标语法不正确”。下面是修改后的行:FOR/F“usebackq tokens=1”%%I IN(
%sqlcmd%-S%server%-d%db%-w200-h-1-E-Q“设置无计数;从dbo选择报告日期。当前报告日期”
)DO set REPORTING_DATE=%%问题很可能是批处理文件路径中的空格。SQLCMD的路径通常位于路径中,因此您不需要设置其完整路径。请检查文件夹是否列在CMD窗口echo%path%中