BCP工具的使用以及C++,SQL server数据库中调用命令行的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a342500329a/article/details/83896518

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命令行的结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a342500329a/article/details/83896518