BCP工具的使用以及C++,SQL server数据库中调用命令行的方法
BCP工具使用:
BCP是由SYBASE公司提供的,专门用于数据库表一级数据备份的工具。
主要参数如下:
基本用法:
远程地址1的数据库表student 导出到本地(远程ip1(10.189.1.1) ):
bcp run.dbo.student out "c:\student .txt" -c -S 10.189.1.1 -U user -P 123456
本地表student 导入到远程地址2(远程ip2(10.189.1.2) ):
bcp run.dbo.student out "c:\student .txt" -c -S 10.189.1.2 -U user -P 123456
-c 表示以字符形式输出
-s 是服务器地址
-u 服务器用户名
-P 数据库用户密码
如果需要用特定字符将数据库表字段分开,则需要加上参数-t ‘#’
bcp run.dbo.student out "c:\student .txt" -c -S 10.189.1.1 -U user -P 123456 -t '#'
C++代码中进行BCP调用:
如果需要一些批处理操作,可能就需要再C++代码中进行BCP的调用,于是也顺便研究了一下。
可以使用c++ system()和WinExec()进行调用。
#include <iostream>
#include <windows.h> //WinExec和system均需求这个头文件
using namespace std;
int main()
{
for(int i=0;i<3;i++){
//WinExec函数在执行时,会顺序执行接下来的代码,不管其cmd指令是否执行完成;
//WinExec("bcp",SW_NORMAL);
system函数在执行时,不会顺序执行接下来的代码,而会停留在system语句上,直到cmd指令执行完毕;
system("bcp");
}
return 0;
}
system(“bcp”);同步调用结果:
WinExec(“bcp”,SW_NORMAL);异步调用结果:
可以看到异步调用显示的结果可能会是乱的,执行几次的结果可能都不一样。
这两个方法需要根据不同的需求使用。
SQL 中使用存储过程xp_cmdshell调用cmd命令
既然C++可以调用命令行,那么SQL SERVER中应该也可以。
然后去查了下资料,果然是有方法的,于是也学习了一下。
使用方法:
EXEC xp_cmdshell 'mkdir d:\myfile',no_output --[no_output]表示是否输出信息
数据库直接运行会有以下报错:
所以需要先打开数据的高级安全配置属性。而打开xp_cmdshell需要先启用show advanced options。
数据库默认这两个属性都是关闭的。
SELECT * FROM sys.configurations WHERE name='xp_cmdshell' OR name='show advanced options'
所以需要先依次把他们的value值设置为1。
EXEC sp_configure 'show advanced options',1 --启用xp_cmdshell的高级配置
GO
RECONFIGURE --刷新配置
GO
EXEC sp_configure 'xp_cmdshell',1 --打开xp_cmdshell,可以调用SQL系统之外的命令
GO
RECONFIGURE --刷新配置
EXEC xp_cmdshell 'bcp' --[no_output]表示是否输出信息
数据库中调用bcp命令行的结果如下: