Перебрать результаты SQLCMD в пакетном файле

Я использую следующий .cmd, чтобы получить значения, возвращаемые одним предложением sql.

@echo off
SET SERVER=.\SQLExpress 
SET SQLCMD="C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe"
for %%f in (%SQLCMD%) do set alternatepath=%%~sf

SET EXEC_LINE=%alternatepath% -S %SERVER% -d SkpMaster -h-1 -Q "set nocount on; select distinct id from sometable "

for /F "usebackq delims=" %%i in (`%EXEC_LINE%`) do (
    set count=%%i
    echo %count%
)

if not defined count (
    echo Failed to execute SQL statement 1>&2
)

SQL возвращает 4 вхождения, но эхо печатает в 4 раза больше вхождения 1º.

Возможно, я неправильно использую опцию "delims=", я также тестировал "tokens=*" с тем же результатом. Есть идеи?


person Carlos Garces    schedule 14.07.2014    source источник


Ответы (1)


Исправлено после обработки параметра %%i другим способом.

@echo off
SET SERVER=.\SQLExpress 
SET SQLCMD="C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe"
for %%f in (%SQLCMD%) do set alternatepath=%%~sf

SET EXEC_LINE=%alternatepath% -S %SERVER% -d SkpMaster -h-1 -Q "set nocount on; select distinct id from sometable "

for /F "usebackq delims=" %%i in (`%EXEC_LINE%`) do call :processline %%i

if not defined count (
    echo Failed to execute SQL statement 1>&2
)

pause
goto :eof

:processline
echo line=%*
goto :eof

:eof
person Carlos Garces    schedule 15.07.2014