Доступ к возвращаемому значению SQL-запроса в SQLCMD
Я пытаюсь получить значение инструкции SQL, когда я запускаю ее в пакетном файле DOS...
sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases"
Я не после уровня ошибки, как в этом qaru.site/info/396351/... вопросе, скорее я после фактического счета, возвращенного из базы данных, поэтому я могу сделать некоторая дополнительная логика.
Ответы
Ответ 1
Вы можете легко сохранить результат выполнения в текстовый файл, либо используя флаг -o
sqlcmd, либо используя стандартный редиректор >
. Затем вы можете отформатировать этот файл, удалив заголовок столбца (флаг -h
) и удалив строку из SQL Server (SET NOCOUNT ON
).
Следующий script будет генерировать файл result.txt
с только значением COUNT(1)
и разрывом строки:
SQLCMD -E -S devserver -Q "SET NOCOUNT ON; SELECT COUNT(1) FROM Cases" -h -1
> result.txt
И затем прочитайте значение с помощью...
set /p value=< result.txt
echo %value%
Ответ 2
Вы можете избежать дополнительного/временного файла, вызвав sqlcmd.exe
с помощью команды FOR
:
for /F usebackq %%i in (`sqlcmd -E -S "devserver,4711" -h-1 -Q "SET NOCOUNT ON; SELECT COUNT(1) ..."`) do (
set count=%%i
)
if not defined count (
echo Failed to execute SQL statement 1>&2
) else (
echo %count%
)
Некоторые примечания:
- Если вы вызываете из интерактивного сеанса
CMD.EXE
, то есть в командной строке, используйте %i
вместо %%i
- Опция
-h-1
сообщает sqlcmd.exe
подавлять заголовки столбцов, поэтому вывод действительно представляет собой только одну строку текста.
- Я использовал вымышленный порт 4711 с сервером, чтобы показать, что вам нужно поместить всю спецификацию "сервер, порт" в двойные кавычки. В противном случае из-за правил синтаксического анализа команд CMD,
sqlcmd
будет видеть сервер и порт в отношении различных аргументов и сбой.
Ответ 3
Ответ от @GerardoLima был на 90%. Вам также необходимо оценить входное значение с помощью set /a
, чтобы удалить ведущие пробелы.
Это не требуется с ответом от @Christian.K
SQLCMD -E -S devserver -Q "SET NOCOUNT ON; SELECT COUNT(1) FROM Cases" -h -1 > result.txt
set /p raw=< result.txt
echo '%raw%'
set /a value=%raw%
echo '%value%'
Мой результат был
' 0'
'0'