SQLServer中用Sqlcmd 定時匯出查詢結果
需求:有一批資料需要每月初從SQLServer中定時將上個月符合條件的結果匯出。
原理:利用Windows中用批處理和定時任務實現定時匯出。
步驟:
1. 用sqlcmd查詢指定的sql語句,並把查詢結果輸出到本地檔案。
2. 用xcopy 把查詢結果拷貝到其它機器指定的目錄下。
指令碼如下:
@echo off set /a v_last_month=%date:~4,2%-1 set v_year=%date:~10,4% if %v_last_month% leq 9 ( set v_outputfile=tblcalls%date:~10,4%0%v_last_month%.txt ) if %v_last_month% gtr 9 ( set v_outputfile=tblcalls%date:~10,4%%v_last_month%.txt ) sqlcmd -h -1 -W -s" " -Q "SET NOCOUNT ON ; select * from test.dbo.volvo_last_month_call " > %v_outputfile% xcopy %v_outputfile% \\192.168.0.100\mabfiles\RECYCLER\%v_year%\tblcalls\ /Q |
把以上內容儲存為bat檔案,加到windows中的定時任務中即可實現定時匯出SQLServer中的查詢結果到檔案中。
如果要匯出的檔案比較多,也可是嘗試使用kettle工具和定時任務配合來實現匯出。
sqlcmd 引數解釋:
詳見:http://technet.microsoft.com/zh-cn/library/ms162773(v=sql.105).aspx
-h headers
指定要在列標題之間輸出的行數。預設為每一組查詢結果輸出一次標題。此選項設定 sqlcmd 指令碼變數 SQLCMDHEADERS。使用 -1 指定不能輸出標題。任何無效的值都將導致 sqlcmd 生成錯誤訊息並隨後退出。
-W remove trailing spaces
此選項刪除列的尾隨空格。在準備要匯出到另一應用程式的資料時,請將此選項和 -s 選項一起使用。不能與 -y 或 -Y 選項一起使用。
-Q"cmdline query " and exit
在 sqlcmd 啟動時執行查詢,隨後立即退出 sqlcmd。可以執行多個以分號分隔的查詢。
當 SET NOCOUNT 為 ON 時,不返回計數(表示受Transact-SQL 語句影響的行數)。
當 SET NOCOUNT 為 OFF 時,返回計數