1. 程式人生 > >SQLServer中用Sqlcmd 定時匯出查詢結果

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 時,返回計數