【记录】SqlBulkCopy 跨数据库,表自定义导入
使用场景:
一个数据库中的表数据,导入到另一个数据库中的表中,这两个表的表结构不一样,如果表结构一样的时候,导入非常简单,直接读取导入就行了,表结构不一样,就意味着需要加入一些判断,SqlBulkCopy 提供了 ColumnMappings,但这只是列名的映射,而不像 AutoMapper 那样可以自定义映射转换,那如何判断导入呢?答案就是在导入之前对原数据集进行验证,得到和目标表一致的表数据,我们可以使用 case when 进行判断。比如 table1 中有两列:State1 和 State2,对应 table1 中的 State,值对应关系为:
- State1 0 && State2 0 对应 State 0
- State1 1 && State2 0 对应 State 1
- State1 0 && State2 1 对应 State 2
- State1 1 && State2 1 对应 State 3
代码示例:
/// <summary>
/// 数据库中的表复制到另一个数据库中的表
/// </summary>
private static void SqlBulkCopyMethod()
{
TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
try
{
SqlConnection connetionPub = new SqlConnection("Server=.; Database=DB1; User ID=sa;Password=sa; MultipleActiveResultSets=True;");
using (connetionPub)
{
SqlCommand commandPub = connetionPub.CreateCommand();
using (commandPub)
{
commandPub.CommandText = @"select
*,
(case when (State1 = 0 and State2=0)
then 0
when (State1 = 0 and State2=1)
then 1
when (State1 = 1 and State2=0)
then 2
when (State1 = 1 and State2=1)
then 3
else 4 end
) State
from table1";
commandPub.CommandType = System.Data.CommandType.Text;
connetionPub.Open();
SqlConnection connectionBulkCopy = new SqlConnection("Server=.; Database=DB2; User ID=sa;Password=sa; MultipleActiveResultSets=True;");
using (connectionBulkCopy)
{
connectionBulkCopy.Open();
SqlDataReader dataReader = commandPub.ExecuteReader();
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionBulkCopy);
using (bulkCopy)
{
bulkCopy.BatchSize = 1000;
bulkCopy.ColumnMappings.Add("id", "ID");
bulkCopy.ColumnMappings.Add("name", "Name");
bulkCopy.ColumnMappings.Add("State", "State");
bulkCopy.DestinationTableName = "table2";
bulkCopy.WriteToServer(dataReader);
}
}
}
}
TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
Console.WriteLine(string.Format("执行时间:{0}秒", ts3.TotalSeconds.ToString()));
Console.ReadKey();
}
catch (Exception ex)
{
throw ex;
}
}
【记录】SqlBulkCopy 跨数据库,表自定义导入的更多相关文章
- java 跨数据库导入大数据
java 跨数据库导入大数据 /** * java程序跨服务器跨数据库批量导入导出百万级数据 * @param args * @throws Exception */ public static vo ...
- Sqlserver 2005 跨数据库 导入数据
--Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...
- 记录-java(jxl) Excel导入数据库
本内容主要包括(文件上传.excel2003数据导入数据库)excel导入数据库功能需要jxl jar包支持 下面是文件上传的前端测试代码 <%@ page language="ja ...
- 20181112-PostgreSQL数据库dmp文件导入(记录一次数据导入)
20181112-PostgreSQL数据库dmp文件导入 标注:dmp文件导入,场景:多个schema导入 1. 环境准备: postgres集群master节点上,postgres用户执行以下操作 ...
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
- SQL Server安全(7/11):使用跨数据库所有权链接(Cross-Database Ownership Chaining)的跨数据库安全
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
- MyBatis 强大之处 多环境 多数据源 ResultMap 的设计思想是 缓存算法 跨数据库 spring boot rest api mybaits limit 传参
总结: 1.mybaits配置工2方面: i行为配置,如数据源的实现是否利用池pool的概念(POOLED – This implementation of DataSource pools JDBC ...
- SQL SERVER SP命令及实现跨数据库查询
1.数据库: (1)sp_helpdb:报告有关指定数据库或所有数据库的信息. 例:sp_helpdb --显示所有数据库信息(名称.大小等) 例:sp_helpdb Recruitment ...
- [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性
前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...
随机推荐
- PHP去重算法的优化过程
最近公司在做一个项目,需要对爬取到的数据进行去重,方法就是根据数据的id,去除掉id重复的数据. 下面是这个方法的演化过程. // 去重 $arr_id = array(); $LeTVFeedLis ...
- MyEclipse新建web project和navicat110_mysql_en工具
首先注意几点: 1.eclipse web项目:项目名称不得超过五个字符,要求全部小写,不管变量名.类名.函数名.文件名,在没有特殊理由的时候,不要用下划线,同时表名和类名用两个单词,尽量不要用Stu ...
- 享元模式 - Flyweight
Flyweight(享元模式) 定义 GOF:运用共享技术有效地支持大量细粒度的对象. GOF的定义比较专业化,通俗来说,当你有大量相似的实例时,你把其中相同的实例取出来共享. 例子 在你的游戏场景中 ...
- maven 本地仓库和远程仓库
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...
- 学习笔记:Hashtable和HashMap
学了这么些天的基础知识发现自己还是个门外汗,难怪自己一直混的不怎么样.但这样的恶补不知道有没有用,是不是过段时间这些知识又忘了呢?这些知识平时的工作好像都是随拿随用的,也并不是平时一点没有关注过这些基 ...
- 日常办公工具利器 notepad++
日常办公工具利器 notepad++ 文本内容比较 Notepad++ https://notepad-plus-plus.org/ http://jingyan.baidu.com/article/ ...
- PostgreSQL的.NET驱动程序Npgsql
Npgsql是PostgreSQL的一个.NET数据提供程序,它可以自由获取.它可以通过下列选项获得独立的下载,也可以安装PostgreSQL数据库程序时选择安装. 最新的_npgsql2 Npgsq ...
- TcpClient 有好多坑
下面2篇文章里头的问题都碰到了,真是好坑哈, 在此留念. 使用 TcpClient 與 NetworkStream 類別開發時的注意事項 [C#] NetworkStream.Write()存在严重b ...
- [Voice communications] 看得到的音频流
上文介绍了 Web Audio API 的相关知识,以及如何在你的 web 程序中引入 音频流,内容都是介绍性的,所以没有写太多 DEMO.本文重点讲解如何利用 Web Audio API 中的中间节 ...
- HTTPS那些事(三)攻击实例与防御(转载)
原创地址:http://www.guokr.com/blog/148613/ 在<HTTPS那些事(二)SSL证书>我描述了使用SSL证书时一些需要注意的安全问题,在这一篇文章里面我再 ...