如何将sql语句执行结果变成文本文档
可以在系统里面运行dos命令,或者用bat批处理,将sql的执行结果变成文本文档
具体使用语句sqlcmd命令,命令格式如下:
sqlcmd
[{ { -U login_id [ -P password ] } | –E trusted connection }]
[ -N encrypt connection ][ -C trust the server certificate ]
[ -z new password ] [ -Z new password and exit]
[ -S [protocol:]server[\instance_name][,port] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection]
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output] [ -r [ 0 | 1 ] msgs to stderr ]
[ -R use client regional settings]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit]
[ -e echo input ] [ -t query time_out ]
[ -I enable Quoted Identifiers ]
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ]
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ]
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort] [ -V severitylevel ] [ -m error_level ]
[ -a packet_size ][ -c cmd_end ]
[ -L [ c ] list servers[clean output] ]
[ -p [ 1 ] print statistics[colon format]]
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit]
[ -? show syntax summary]
-U login_id
是用户登录 ID。
-P password
用户指定的密码。
-E trusted connection
使用信任连接而不是用户名和密码登录
-N encrypt connection
此开关供客户端用于请求加密连接
-C trust the server certificate
该开关供客户端用于将其配置为隐式表示信任服务器证书且无需验证。
-z new password
更改密码:
-Z new password and exit
更改密码并退出:
-S [protocol:]server[\instance_name][,port]
指定要连接的 SQL Server 实例。
-H wksta_name
工作站的名称。
-d db_name
启动 sqlcmd 时发出一个 USE db_name 语句。
-l logintime_out
指定在您尝试连接到服务器时 OLE DB 访问接口的 sqlcmd 登录超时时间(以秒计)。
-A dedicated admin connection
使用专用管理员连接 (DAC) 登录到 SQL Server。
-i input_file[,input_file2...]
标识包含一批 SQL 语句或存储过程的文件。
-o output_file
标识从 sqlcmd 接收输出的文件。
-u unicode output
指定无论 input_file 为何种格式,output_file 都以 Unicode 格式进行存储。
-r[ 0 | 1] msgs to stderr
将错误消息输出重定向到屏幕 (stderr)。
-R use client regional settings
促使 sqlcmd 根据客户端的区域设置本地化从 SQL Server 中检索到的数字、货币、日期和时间列。
-q" cmdline query "
启动 sqlcmd 时执行查询,但是在查询结束运行时不退出 sqlcmd。
-Q"cmdline query " and exit
在 sqlcmd 启动时执行查询,随后立即退出 sqlcmd。
-e echo input
将输入脚本写入标准输出设备 (stdout)。
-I enable Quoted Identifiers
将 SET QUOTED_IDENTIFIER 连接选项设置为 ON。
-t querytime_out
指定命令(或 SQL 语句)超时的时间。
-x disable variable substitution
导致 sqlcmd 忽略脚本变量。
-h headers
指定要在列标题之间输出的行数。默认为每一组查询结果输出一次标题。使用 -1 指定不能输出标题。
-s col_separator
指定列分隔符字符。默认为空格。
-w column_width
指定用于输出的屏幕宽度。
-W remove trailing spaces
此选项删除列的尾随空格。
-k [ 1 | 2 ] remove[replace] control characters
删除输出中的所有控制字符,例如制表符和换行符。
-y display_width
设置 sqlcmd 脚本变量 SQLCMDMAXFIXEDTYPEWIDTH。
-Y display_width
设置 sqlcmd 脚本变量 SQLCMDMAXVARTYPEWIDTH。
-b on error batch abort
指定发生错误时,sqlcmd 退出并返回一个 DOS ERRORLEVEL 值。
-V severitylevel
控制用于设置 ERRORLEVEL 变量的安全级别。
-m error_level
控制将哪些错误消息发送到 stdout。
-a packet_size
需要不同大小的数据包。
-c cmd_end
指定批处理终止符。
-L [ c ] list servers[clean output]
列出在本地配置的服务器和在网络上广播的服务器的名称。
-p [ 1 ] print statistics[colon format]
输出每个结果集的性能统计信息。
-X [ 1 ] disable commands, startup script, enviroment variables [and exit]
从批处理文件执行 sqlcmd 时,将禁用可能危及系统安全的命令。
具体实现如下:
首先做一个文本文档sql.txt,放入需要执行的语句
set nocount on
select c_userno,c_name,c_type,c_status,c_phone from tb_user
再做一个批处理文件sql.bat
sqlcmd -S 127.0.0.1 -d enjoy_shq -U sa -P 123456 -i D:\sql.txt -o D:\result.txt -u -h -1
执行bat文件,就可以将sql执行结果输出到文本文档result.txt
具体参数解释:
-S 127.0.0.1 数据库地址
-d enjoy_shq 数据库名称
-U sa 登录用户名
-P ****** 登录密码
-i D:\sql.txt 执行脚本
-o D:\result.txt 输出文件名
-u 以Unicode 格式进行存储
-h -1 不输出标题
语句中set nocount on 控制是否输出执行结果的行数
如果想要带参数
语句可以写为
set nocount on
select c_userno,c_name,c_type,c_status,c_phone from tb_user
where c_userno = $(userno)
执行的批处理写为
sqlcmd -S 127.0.0.1 -d enjoy_shq -U sa -P 123456 -i D:\sql.txt -o D:\result.txt -u -h -1 -v userno = "0000"
https://msdn.microsoft.com/zh-cn/library/ms162773.aspx
[此贴子已经被作者于2016/1/23 15:26:22编辑过]
以上语句在sql2008测试通过,sql2000的话,可以在cmd下运行下面语句
bcp "SELECT c_userno,c_name,c_type,c_status,c_phone FROM enjoy_shq.dbo.tb_user" queryout D:\result.txt -c -t , -S 127.0.0.1 -U sa -P 123456"