使用表类型(Table Type)实现百万级别的数据一次性插入

思路

1 创建表类型(TaBleType)
         2 创建添加存储过程
         3 使用C#语言构建一个DataTable
         4 将整个Table作为参数插入

步骤1 创建表类型(TaBleType)

CREATE TYPE [dbo].[TestTableType] AS TABLE(
[SeriesNumber] [nvarchar](80) NOT NULL,
[CustomerName] [nvarchar](80) NOT NULL,
)

步骤2  创建添加存储过程

CREATE procedure [dbo].[usp_Add_RepeatDataAnalysis]
(
@TestTableType TestTableType READONLY
)
AS
BEGIN
SET NOCOUNT ON
BEGIN TRANSACTION
INSERT INTO MES_SNOriginal
(
SeriesNumber,
CustomerName
)
SELECT
SeriesNumber
,CustomerName
FROM @TestTableType
COMMIT TRANSACTION
END

步骤3  使用C#语言构建一个DataTable

public static void TestTableType()
{

DataTable dataTable = new DataTable();

dataTable.Columns.Add("SeriesNumber", typeof(string));

dataTable.Columns.Add("CustomerName", typeof(string));

DataRow dataRow = dataTable.NewRow();

dataRow["SeriesNumber"] = "SeriesNumber";

dataRow["CustomerName"] = "SeriesNumber";

AddTestTableType(dataTable);

}

步骤4  将整个Table作为参数插入

public static void AddTestTableType(DataTable dt)
{

SqlParameter[] parameters = new SqlParameter[1];

parameters[0] = new SqlParameter() { ParameterName = "TestTableType", Value = dt };//值为上面转换的datatable

ExecuteStoredProcedure("usp_Add_RepeatDataAnalysis", parameters);

}

public static void ExecuteStoredProcedure(string spName, SqlParameter[] parameterValues)
{

//自己配置数据库连接

string connectionString = "";

List<TestTableTypeDTO> resultList = new List<TestTableTypeDTO>();

using (SqlConnection conn = new SqlConnection(connectionString))

{

conn.Open();

SqlCommand cmd = new SqlCommand(spName, conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandTimeout = 0;

foreach (SqlParameter p in parameterValues)

{

if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))

{

p.Value = DBNull.Value;

}

cmd.Parameters.Add(p);

}

cmd.ExecuteNonQuery();

}

}

}

public class TestTableTypeDTO
{

public int MES_SNOriginal_UID { get; set; }

public string SeriesNumber { get; set; }

}

使用表类型(Table Type-SqlServer)实现百万级别的数据一次性毫秒级别插入的更多相关文章

  1. 虎牙在全球 DNS 秒级生效上的实践 集群内通过 raft 协议同步数据,毫秒级别完成同步。

    https://mp.weixin.qq.com/s/9bEiE4QFBpukAfNOYhmusw 虎牙在全球 DNS 秒级生效上的实践 原创: 周健&李志鹏 阿里巴巴中间件 今天

  2. 匿名块的四个类型(type rowtype record table)

    Oracle PL/SQL块 匿名块的四个类型 type rowtype record table ---- type (列类型)  %type类型是指声明变量的时候,参考某个表的某个列的类型---- ...

  3. Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)

    方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...

  4. 父类通过泛型获得子类Class类型 以及Type体系

    1.背景介绍 在实现SSH框架中,DAO层向数据库持久化的过程中,因为大部分保存对象的方法都会调用到sava():所有索性就把save delete update select 方法进行封装到父类中, ...

  5. 定义结构体和table type

    1: 在se11 中创建结构体 2: 定义一个内表, row type 使用structure类型,将会具有structure的字段. 3:在代码中 使用 结构体和table  type *& ...

  6. #1214 - The used table type doesn't support FULLTEXT indexes解决办法

    #1214 - The used table type doesn't support FULLTEXT indexes报此错误的原因是:InnoDB不支持FULLTEXT类型的索引. 网上的解决办法 ...

  7. Excel如何快速渲染百万级别的数据

    Excel主要经历1.查询2.渲染的方式 关于查询: 不同技术水平的人有不同的解决方案,目前我采用的是 1:多线程查询 2:一个异步后台线程每次查询100条便渲染,采用的“懒加载方式”,这样可以做到实 ...

  8. html <input>标签类型属性type(file、text、radio、hidden等)详细介绍

    html <input>标签类型属性type(file.text.radio.hidden等)详细介绍 转载请注明:文章转载自:[169IT-最新最全的IT资讯] html <inp ...

  9. SQLServer处理亿万级别的数据的优化措施

    如何在SQLServer中处理亿万级别的数据(历史数据),可以按以下方面进行: 去掉表的所有索引 用SqlBulkCopy进行插入 分表或者分区,减少每个表的数据总量 在某个表完全写完之后再建立索引 ...

随机推荐

  1. for循环:用turtle画一颗五角星

    import turtle # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.right(9 ...

  2. CommonsChunkPlugin

    CommonsChunk 插件的作用就是提取代码中的公共代码,然后将公共模块打包到一个独立的文件中,以便在其它的入口和模块中使用,原理就是把多个入口共同的依赖都给定义成一个新入口 多种打包情况: 单一 ...

  3. Cheat Engine 6.8 设置中文

    下载翻译文件包 https://cheatengine.org/downloads.php 下载后解压到 "Cheat Engine 6.8.3\languages" 下面 修改 ...

  4. redis消息队列,tp5.0,高并发,抢购

    redis处理抢购,并发,防止超卖,提速 1.商品队列(List列表),goods_list           控制并发,防止超卖 2.订单信息(Hash集合),order_info        ...

  5. hive的join

    第一:在map端产生join          mapJoin的主要意思就是,当链接的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去,然后再对比较大的表格进行m ...

  6. Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好

    也不知道是幸运还是不幸,我从一开始接触ubuntu就遇到这一系列的问题, 而且一直没有一个彻底解决的办法,搞得我无比头疼,也害得我重装了无数遍系统... 国际惯例,只按照个人习惯和喜好来写,对某些人来 ...

  7. 30、vue 过滤器(filters)

    filter Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 Ja ...

  8. sublime No packages available for installation

    package control user-setting 中添加: "channels": [ "C:\\channel_v3.json" ], channel ...

  9. CentOS 5.9裸机编译安装搭建LAMP

    Linux系统:CentOS 5.9,查看CentOS版本,命令如下: [root@localhost /]# cat /etc/redhat-release CentOS release 5.9 ( ...

  10. JavaEE开发之Spring中的依赖注入与AOP编程

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...