使用表类型(Table Type-SqlServer)实现百万级别的数据一次性毫秒级别插入
使用表类型(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)实现百万级别的数据一次性毫秒级别插入的更多相关文章
- 虎牙在全球 DNS 秒级生效上的实践 集群内通过 raft 协议同步数据,毫秒级别完成同步。
https://mp.weixin.qq.com/s/9bEiE4QFBpukAfNOYhmusw 虎牙在全球 DNS 秒级生效上的实践 原创: 周健&李志鹏 阿里巴巴中间件 今天
- 匿名块的四个类型(type rowtype record table)
Oracle PL/SQL块 匿名块的四个类型 type rowtype record table ---- type (列类型) %type类型是指声明变量的时候,参考某个表的某个列的类型---- ...
- Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)
方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...
- 父类通过泛型获得子类Class类型 以及Type体系
1.背景介绍 在实现SSH框架中,DAO层向数据库持久化的过程中,因为大部分保存对象的方法都会调用到sava():所有索性就把save delete update select 方法进行封装到父类中, ...
- 定义结构体和table type
1: 在se11 中创建结构体 2: 定义一个内表, row type 使用structure类型,将会具有structure的字段. 3:在代码中 使用 结构体和table type *& ...
- #1214 - The used table type doesn't support FULLTEXT indexes解决办法
#1214 - The used table type doesn't support FULLTEXT indexes报此错误的原因是:InnoDB不支持FULLTEXT类型的索引. 网上的解决办法 ...
- Excel如何快速渲染百万级别的数据
Excel主要经历1.查询2.渲染的方式 关于查询: 不同技术水平的人有不同的解决方案,目前我采用的是 1:多线程查询 2:一个异步后台线程每次查询100条便渲染,采用的“懒加载方式”,这样可以做到实 ...
- html <input>标签类型属性type(file、text、radio、hidden等)详细介绍
html <input>标签类型属性type(file.text.radio.hidden等)详细介绍 转载请注明:文章转载自:[169IT-最新最全的IT资讯] html <inp ...
- SQLServer处理亿万级别的数据的优化措施
如何在SQLServer中处理亿万级别的数据(历史数据),可以按以下方面进行: 去掉表的所有索引 用SqlBulkCopy进行插入 分表或者分区,减少每个表的数据总量 在某个表完全写完之后再建立索引 ...
随机推荐
- for循环:用turtle画一颗五角星
import turtle # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.right(9 ...
- CommonsChunkPlugin
CommonsChunk 插件的作用就是提取代码中的公共代码,然后将公共模块打包到一个独立的文件中,以便在其它的入口和模块中使用,原理就是把多个入口共同的依赖都给定义成一个新入口 多种打包情况: 单一 ...
- Cheat Engine 6.8 设置中文
下载翻译文件包 https://cheatengine.org/downloads.php 下载后解压到 "Cheat Engine 6.8.3\languages" 下面 修改 ...
- redis消息队列,tp5.0,高并发,抢购
redis处理抢购,并发,防止超卖,提速 1.商品队列(List列表),goods_list 控制并发,防止超卖 2.订单信息(Hash集合),order_info ...
- hive的join
第一:在map端产生join mapJoin的主要意思就是,当链接的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去,然后再对比较大的表格进行m ...
- Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好
也不知道是幸运还是不幸,我从一开始接触ubuntu就遇到这一系列的问题, 而且一直没有一个彻底解决的办法,搞得我无比头疼,也害得我重装了无数遍系统... 国际惯例,只按照个人习惯和喜好来写,对某些人来 ...
- 30、vue 过滤器(filters)
filter Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 Ja ...
- sublime No packages available for installation
package control user-setting 中添加: "channels": [ "C:\\channel_v3.json" ], channel ...
- CentOS 5.9裸机编译安装搭建LAMP
Linux系统:CentOS 5.9,查看CentOS版本,命令如下: [root@localhost /]# cat /etc/redhat-release CentOS release 5.9 ( ...
- JavaEE开发之Spring中的依赖注入与AOP编程
上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...