需求:有一批数据需要每月初从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 时,返回计数