2011-07-22 32 views
4

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

如何做到这一点?我看到的系统中最接近的例子是,如果我根据标量查询结果返回退出代码。

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). 

回答

2

我在批处理文件中使用它。它返回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 
+0

你的答案看起来不错。只是一个后续问题:我会撒谎以完全限定到sqlcmd的路径,例如,SET sqlcmd =“C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ sqlcmd.exe”,但是当我这样做时,我得到“文件名,目录名称或卷标语法不正确。” – ChadD

+0

下面是修改后的行:FOR/F“usebackq tokens = 1”%% i IN('%sqlcmd%-S%server%-d%db%-w200 -h-1 -E -Q“set nocount on; select REPORTING_DATE FROM dbo.CURRENT_REPORTING_DATE“')DO set REPORTING_DATE = %% i – ChadD

+0

http://stackoverflow.com/questions/6860897/issue-executing-an-exe-when-the-path-has-spaces – ChadD

0

你看着sqlcmd

+0

是的,但我需要帮助的语法。 – ChadD

4

如何将其保存到没有标题的文件然后再读取内容?

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%