SQL Server通过BCP进行大批量数据导入导出

预置条件:

使用sa帐号登录SQL Server Management Studio,右键点击安全性-登录名-数据库用户名属性,设置服务器角色为sysadmin。

删除已存在的存储过程

String JOB_BCP_DELETE_SQL = “IF EXISTS (SELECT * FROM sys.objects WHERE name = 'PROCEDURE_BCP_OUT' AND type in (N'P', N'PC'))\n DROP PROCEDURE PROCEDURE_BCP_OUT \n”;
pre = conn.prepareStatement(JOB_BCP_DELETE_SQL);
pre.execute();

创建存储过程

String sql = "set @sql = N'BCP ' + @tableName + ' out ' + @filePath + ' -c -t -U \"' + @userName + '\" -P \"' + @password + '\" -S \"' + @dbIp + '\"'\n";
StringBuffer createSqlBuf = new StringBuffer();
createSqlBuf.append("CREATE PROCEDURE PROCEDURE_BCP_OUT \n")
    .append("@dbIp nvarchar(256),\n")
    .append("@userName nvarchar(256),\n")
    .append("@password nvarchar(256),\n")
    .append("@tableName nvarchar(256),\n")
    .append("@filePath nvarchar(256)\n")
    .append("AS\n")
    .append("BEGIN\n")
    .append("EXEC master.sys.sp_configure 'show advanced options', 1\n")
    .append("RECONFIGURE\n")
    .append("EXEC master.sys.sp_configure 'xp_cmdshell', 1\n")
    .append("RECONFIGURE\n")
    .append("declare @sql nvarchar(256)\n")
    .append(sql)
    .append("EXEC master..xp_cmdshell @sql\n")
    .append("EXEC master.sys.sp_configure 'show advanced options', 1\n")
    .append("RECONFIGURE\n")
    .append("EXEC master.sys.sp_configure 'xp_cmdshell', 0\n")
    .append("RECONFIGURE\n")
    .append("END");
String createSql = createSqlBuf.toString();
pre = conn.prepareStatement(createSql);
pre.execute();

执行存储过程

StringBuffer execSqlBuf = new StringBuffer();
execSqlBuf.append("EXECUTE PROCEDURE_BCP_OUT \n")
    .append("@dbIp=?, ").append("@userName=?, ").append("@password=?, ")
    .append("@tableName=?, ").append("@filePath=?");
String execSql = execSqlBuf.toString(); 
pre = conn.prepareStatement(execSql);
pre.setString(1, dbIp);
pre.setString(2, dbUserName);
pre.setString(3, dbPassword);
pre.setString(4, tableName);
pre.setString(5, file);
pre.execute();

 

转载于:https://www.cnblogs.com/aaroncnblogs/p/8861831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值