Вернуть скалярный результат запроса в переменную пакетного файла - PullRequest
4 голосов
/ 22 июля 2011

Я хотел бы выполнить скалярный запрос к базе данных и вернуть результат в переменную в пакетном файле.

Как можно это сделать? Самый близкий пример, который я вижу в нашей системе, это то, возвращаю ли я код выхода, основанный на скалярном результате запроса.

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

Ответы [ 3 ]

4 голосов
/ 27 июля 2011

Как насчет сохранения его в файл без заголовков с последующим чтением содержимого обратно?

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%
2 голосов
/ 28 июля 2011

Я использую это в командном файле.Возвращает имя логического файла для файла данных базы данных SQL Server.Это работает только в том случае, если в базе данных имеется один файл данных.

Таким образом, в результате переменная окружения 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 голосов
/ 22 июля 2011

Вы смотрели на sqlcmd ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...