很多大型的系统不仅仅提供了友好的图形用户接口,同时也提供了命令行方式对系统进行控制。在SQL Server中除了可以使用SQL语句对数据进行操作外,还可以使用一个命令行工具BCP对数据进行同样的操作。BCP是基于DB-Library 客户端库的工具。它的功能十分强大,BCP能够以并行方式将数据从多个客户端大容量复制到单个表中,从而大大提高了装载效率。但在执行并行操作时要注意的是只有使用基于 ODBC 或 sql OLE DB 的 API 的应用程序才可以执行将数据并行装载到单个表中的操作。
BCP可以将SQL Server中的数据导出到任何OLE DB所支持的数据库的,如下面的语句是将authors表导出到Excel文件中
bcp "pubs.dbo.authors" out "c:\temp1.xls" -c -S GNETDATA\GNETDATA -U sa -P passWord
BCP不仅能够通过命令行执行,同时也可以通过SQL执行,这需要一个系统存储过程xp_cmdshell来实现,如上面的命令可改写为如下形式。
EXEC master..xp_cmdshell 'bcp "pubs.dbo.authors" out "c:temp1.xls" -c -S GNETDATA\GNETDATA -U sa -P passWord'
附在我本机成功的方法:
1、CMD命令行下执行:
C:\>BCP "select Current_Timestamp" queryout "d:\ab.txt" -c -U user1 -P p1234 -S DELL-MSSQL\SQLEXPRESS
DELL-MSSQL\SQLEXPRESS 表示: 机器名\数据库实例名
2、SQL执行:
EXEC master..xp_cmdshell 'BCP "select Current_Timestamp" queryout "d:\临时文件\ab.txt" -c -U user1 -P 1234 -S DELL-MSSQL\SQLEXPRESS'
DELL-MSSQL\SQLEXPRESS 表示: 机器名\数据库实例名
最后提醒一下,不成功的原因主要与目录权限有关。请确保SQL Server 已开放 xp_cmdshell 的使用权限(可以SQL Server外围应用配置器中设置),再一个就是要有生成文件所在目录的系统操作权限(要有目录的写权限)。因为操作权限的原因让我白白浪费了不少时间。