当我在 DOS 批处理文件中运行 SQL 语句时,我试图获取它的值...
sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases"
我不是在这个stackoverflow问题中的错误级别之后,而是在从数据库返回的实际计数之后,所以我可以做一些额外的逻辑。
当我在 DOS 批处理文件中运行 SQL 语句时,我试图获取它的值...
sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases"
我不是在这个stackoverflow问题中的错误级别之后,而是在从数据库返回的实际计数之后,所以我可以做一些额外的逻辑。
您可以使用-osqlcmd 标志或使用标准>重定向器轻松地将执行结果保存到文本文件中。然后,您可以通过删除列标题 (flag -h) 并从 SQL Server ( SET NOCOUNT ON) 中删除行数来格式化此文件。
以下脚本将生成一个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%
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禁止列标题,因此输出实际上只有一行文本。sqlcmd会将服务器和端口视为不同的参数并失败。@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'