我想,當我在DOS批處理文件運行它得到一個SQL語句的值...訪問SQL語句的返回值在SQLCMD
sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases"
我不後錯誤級別在這個stackoverflow問題中,而是在從數據庫返回的實際計數之後,所以我可以做一些額外的邏輯。
我想,當我在DOS批處理文件運行它得到一個SQL語句的值...訪問SQL語句的返回值在SQLCMD
sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases"
我不後錯誤級別在這個stackoverflow問題中,而是在從數據庫返回的實際計數之後,所以我可以做一些額外的邏輯。
通過使用-o
sqlcmd標誌或使用標準>
重定向器,可以輕鬆地將執行結果保存到文本文件中。然後可以通過刪除列標題(標誌-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%
你能避免通過使用FOR
批命令調用sqlcmd.exe
:
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'
+1剛看到,張貼我的答案,你的還包括'-h後 - 1'選項。 –
部分...我如何將值返回到DOS批處理文件? – SteveC
然後@ Christian.K解決方案(使用FOR)可能更適合你,因爲它會評估命令的結果,然後你可以分配給一個批處理變量,你只需要添加一個簡單的測試來避免空字符串。 –