sqlserver 批量快速插入数据

2023-10-30

先转换成DataTable 然后插入数据
1.使用最后再看看使用表值参数的效率 效率最高。
首先先创建 表值特性类型的表(此表应该与转换后的datatable的列相同不然会出错)
查看地方在:当前数据库下的 可编程性-类型-用户定义表类型

CREATE TYPE MainTable AS TABLE
  (
    Id Int,
    [Gonghao] [varchar](20) NULL,
	[Xingming] [varchar](40) NULL,
	[Bumen] [varchar](40) NULL,
	[KaoqinDate] [datetime] NULL,
	[CreateLine] [int] NULL
)
 /// <summary>
        /// 批量插入数据
        /// </summary>
        /// <param name="dt"></param>
        public ResultMsg  TableValuedToDB(DataTable dt )
        {
            ResultMsg msg = new ResultMsg();
            ServerSet oneSet = new ServerSet();
            oneSet = Common.JsonToIni.GetClass<ServerSet>(Common.ConfigFiles.ConfigFile);
            string ConnectString = $"Data Source={oneSet.DBAdd};Initial Catalog={oneSet.DBName};Integrated Security=false;User ID={oneSet.DBUser};Password={oneSet.DBPwd};Connection Timeout=5;";//mysql链接字符
           SqlConnection sqlConn = new SqlConnection(ConnectString);
            const string TSqlStatement = @"INSERT [KaoqinMain]([Gonghao],[Xingming],[Bumen],[KaoqinDate],[CreateLine])  SELECT   nc.Gonghao,nc.Xingming, nc.Bumen,nc.KaoqinDate,nc.CreateLine  from @NewBulkTestTvp AS nc";
            SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
            SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
            catParam.SqlDbType = SqlDbType.Structured;
            //表值参数的名字叫MainTable ,上面创建的表特性()。
            catParam.TypeName = "dbo.MainTable";
            try
            {
                sqlConn.Open();
                if (dt != null && dt.Rows.Count != 0)
                {
                    cmd.ExecuteNonQuery();
                    msg.Success = true;
                }
            }
            catch (Exception ex)
            {
                msg.Success = false;
                msg.ErrMsg = ex.Message; 
            }
            finally
            {
                sqlConn.Close();
            }
            return msg;
        }

2.bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库

public static void BulkToDB(DataTable dt)  
{  
    SqlConnection sqlConn = new SqlConnection(  
        ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);  
    SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);  
    bulkCopy.DestinationTableName = "BulkTestTable";  
    bulkCopy.BatchSize = dt.Rows.Count;  
  
    try  
    {  
        sqlConn.Open();  
    if (dt != null && dt.Rows.Count != 0)  
        bulkCopy.WriteToServer(dt);  
    }  
    catch (Exception ex)  
    {  
        throw ex;  
    }  
    finally  
    {  
        sqlConn.Close();  
        if (bulkCopy != null)  
            bulkCopy.Close();  
    }  
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlserver 批量快速插入数据 的相关文章

  • Postgres 简单的“数据透视表”

    如果我有一个这样的数据表 name type count test blue 6 test2 red 3 test red 4 我怎样才能查询它以获得一个表 name num red num blue test 4 6 test2 3 0
  • SQL 多次更新与单次更新性能

    假设我有 10 000 行需要更新 什么会更快 UPDATE DB Servers SET Live 1 where name server1 UPDATE DB Servers SET Live 1 where name server2
  • 将单个列连接到逗号分隔的列表中[重复]

    这个问题在这里已经有答案了 我已经看到了人们将单个列滚动到逗号分隔列表中的多个示例 但我需要更多 这是我需要的数据和结果的示例 DECLARE SalesPerson table SalesPersonID int SalesPersonN
  • MYSQL 查询返回“资源 id#12”而不是它应返回的数值

    不知道为什么 但这返回了错误的值 我正在取回此资源 ID 12 而不是我正在寻找的数值 1 执行此操作的代码是 type SELECT account type from user attribs WHERE username userna
  • 如何在MyBatis foreach中迭代HashMap?

    我正在尝试在 mybatis 中生成如下所示的 sql SELECT COL C FROM TBLE 1 WHERE COL A COL B in kp kar srt sach 而我的输入参数类型是HashMap 现在如何从映射器 xml
  • 插入后用触发器更新多行(sql server)

    我有一个表 orderDetails 包含订单的产品 产品编号 color size quantity 和一个表库存 产品编号 size color stock 订单完成后 我使用此查询将项目插入表中orderDetails INSERT
  • 为什么此 SQL 更新失败(“列名无效”)?

    我有一个 SQL Server CE 表 如下所示 我正在尝试像这样更新其唯一记录 update workTables set fileType INV 但我得到 Why UPDATE 请查看相关问题here https stackover
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • Sql Server:如何在 WHERE 子句中使用 MAX 等聚合函数

    我想获得该记录的最大值 请帮我 SELECT rest field1 FROM mastertable AS m INNER JOIN SELECT t1 field1 field1 t2 field2 FROM table1 AS T1
  • 如何在sqlite中创建物化视图?

    我对物化视图和 SQLite 进行了无数次搜索 据我所知 2004 年和 2006 年似乎有人提到 SQLite 没有物化视图 紧随其后的是 SQLite 的变更日志2008年3月 http www sqlite org releaselo
  • 设置 xact_abort 并尝试一起捕获

    我的 sp 中有一个 try catch 块 其中只有一条插入语句 catch 检查错误代码是否违反 pk 如果是则进行更新 但有时我得到 当前事务无法提交 并且无法支持写入日志文件的操作 回滚事务 在批处理结束时检测到不可提交的事务 事务
  • java.sql.Timestamp 到微秒精度的字符串

    我正在将时间戳列从数据库读取到 java sql Timestamp 对象中 然后我想将时间戳的值转换为 String 对象 但保持微秒精度 调用 toString 方法让我接近 但它似乎在微秒内丢失了尾随零 如果时间戳以非零数字结尾 则一
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 使用 Switch 的报告服务表达式

    我无法让这个表达式与报告服务一起使用 我必须使用 IF 和 ELSE IF 语句 感谢您的任何建议 Switch IsNothing Fields field date Value Fields set flag Value 1 Decli
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo

随机推荐

  • 创建利润中心在利润中心组选择时提示不存在利润中心组

    已经KCH1创建好利润中心组的情况下KE51选刚才创建好的利润中心组依然会有如题这样的提示 原因是没有0KE5进行成本控制范围设置 如图下图 设置好后再KE51创建利润中心就可以了
  • 《代码大全2》第4章 关键的“构建“决策

    目录 前言 本章主题 4 1 选择编程语言 4 2 编程约定 4 3 你在技术浪潮中的位置 4 3 1 深入一种语言去编程 的例子 4 3 2 在一种语言上编程 和 深入一种语言去编程 的区别 4 4 选择主要的构建实践方法 核对表 主要的
  • Mac使用国内源安装homebrew

    记录一下使用国内镜像源重装homebrew 在终端输入以下命令 bin bash c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh 会有如下提示 开始执
  • Android_AlarmManager(全局定时器)

    一 简介 AlarmManage有一个AlarmManagerServie服务程序 该服务程序才是正真提供闹铃服务的 它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备 在系统中 linux实现的设备名 为 dev a
  • 【 NLP】如何减小预训练语言模型?

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 【SCOI2010】股票交易

    Description SCOI2010 股票交易 在T天时间内 第 i 天股票购入价为 ap i 出售价为 bp i 每天最多购入 as i 股 最多出售 bs i 股 任意时刻手中的股票数不能超过 Maxp 且两次交易至少间隔 W 天
  • tomcat为什么把那个文件取名为catalina

    内部寓意就是tomcat的脚本文件 寄寓 是个小岛的名字 开发者曾在岛上生活过 Tomcat的这个单词的意思是 公猫 因为它的开发者姆斯 邓肯 戴维森希望用一种能够自己照顾自己的动物代表这个软件 于是命名为tomcat 它的Logo兼吉祥物
  • 分布式环境下的数据一致性

    1 互联网技术的四大法宝 多线程 分布式 异步 缓存 2 事务 编程式事务 3乐观锁 悲观锁 基于状态机的乐观锁
  • Android中引用sweet-alert-dialog以及遇到的问题解决

    概述 sweet alert dialog是一个带动画效果的自定义对话框样式 可以让你的Android程序的对话框优美很多 GitHub地址 Android Studio中引用 repositories mavenCentral depen
  • 【解决vscode终端输出中文乱码问题图文教程】

    全网最全解决vscode运行C C 终端输出乱码问题图文教程 解决vscode终端输出中文乱码问题 强推 方法二 少走几年弯路 乱码原因 方法一 永久性 方法二 永久性 强力推荐 附加 CMD修改成旧控制台 方法三 临时性 如果之前尝试了其
  • kafka入门,发送原理和生产者重要参数(三)

    发送原理 在消息发送过程中 涉及两个线程 main线程和Sender线程 在main线程中创建了一个双端队列 RecordAccumulator Sender过程不断从RecordAccumulator中拉取消息发送到Kafka Broke
  • Maven本地仓库安装jar包

    开发过程中的jar包依赖 通常是通过中央仓库 阿里云仓库等地方直接下载的 但是有一些jar包是不太容易下载 或者说对应的仓库中没有对应的jar包 比如ojdbc6 11 2 0 1 0 jar这个jar包 maven中央仓库中就没有这个版本
  • 基于 WEB 的室内温湿度监测系统(树莓派)

    一 项目介绍 本实验通过 DHT11 模块测量大气中温湿度 利用树莓派多功能的用途 将温湿度测量结果显示到网页 并包含历史数据 实时折线图表示 二 实验介绍 1 实验原材料 树莓派 Raspberry 4 Model B DHT11 v1
  • 计算机添加启动程序,电脑的开机启动项怎么设置?

    每次电脑开机都一堆软件争先恐后的在自动启动 很影响我们的正常使用 电脑开机时间也越来越长 这时灵活的设置我们的开机启动项就很有必要了 能帮助我们更高效的使用电脑 那么 我们该怎么设置这些开机自启的软件呢 方法一 手动设置 1 添加电脑的开机
  • 【MongoDB】基于Docker的MongoDB replica set(副本集)更换节点

    之前搭的副本集 1主 1从 1投票 今天要进行把投票节点切换服务器 首先 在新服务器上启动mongodb服务 然后 在主节点上对集群配置进行更新 rs0 PRIMARY gt cfg rs conf rs0 PRIMARY gt cfg m
  • yolov5训练结果解析

    在每次训练之后 都会在runs train文件夹下出现一下文件 如下图 一 weights 包含best pt 做detect时用这个 和last pt 最后一次训练模型 二 confusion 1 混淆矩阵 混淆矩阵是对分类问题的预测结果
  • 【无标题】数组转化成tree

    在这里插入图片描述 父数组 father G1 G2 G3 G4 G5 子数组 son 1 2 3 4 5 数组转化成tree
  • java实现金额数字转换为中文大写

    import java io import java lang IllegalArgumentException public class ConvertNum 把金额阿拉伯数字转换为汉字表示 小数点后四舍五入保留两位 还有一种方法可以在转
  • 浅拷贝与深拷贝例题与思考

    title 浅拷贝与深拷贝 author hou wei date 2023 04 17 output html document knitr opts chunk set echo TRUE 问答题 0 请问你是如何理解 在 Python
  • sqlserver 批量快速插入数据

    先转换成DataTable 然后插入数据 1 使用最后再看看使用表值参数的效率 效率最高 首先先创建 表值特性类型的表 此表应该与转换后的datatable的列相同不然会出错 查看地方在 当前数据库下的 可编程性 类型 用户定义表类型 CR