好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > SQL Server批量插入數據案例詳解

SQL Server批量插入數據案例詳解

熱門標簽:實體店地圖標注怎么標 武漢AI電銷機器人 股票配資電銷機器人 南京電銷外呼系統哪家好 地圖標注如何弄全套標 萬利達綜合醫院地圖標注點 在電子版地圖標注要收費嗎 電銷機器人 深圳 外呼系統會封嗎

在SQL Server 中插入一條數據使用Insert語句,但是如果想要批量插入一堆數據的話,循環使用Insert不僅效率低,而且會導致SQL一系統性能問題。下面介紹SQL Server支持的兩種批量數據插入方法:Bulk和表值參數(Table-Valued Parameters),高效插入數據。

新建數據庫:

--Create DataBase  
create database BulkTestDB;  
go  
use BulkTestDB;  
go  
--Create Table  
Create table BulkTestTable(  
Id int primary key,  
UserName nvarchar(32),  
Pwd varchar(16))  
go 

一.傳統的INSERT方式

先看下傳統的INSERT方式:一條一條的插入(性能消耗越來越大,速度越來越慢)

        //使用簡單的Insert方法一條條插入 [慢]
        #region [ simpleInsert ]
        static void simpleInsert()
        {
            Console.WriteLine("使用簡單的Insert方法一條條插入");
            Stopwatch sw = new Stopwatch();
            SqlConnection sqlconn = new SqlConnection("server=.;database=BulkTestDB;user=sa;password=123456;");
            SqlCommand sqlcmd = new SqlCommand();
            sqlcmd.CommandText = string.Format("insert into BulkTestTable(Id,UserName,Pwd)values(@p0,@p1,@p2)");
            sqlcmd.Parameters.Add("@p0", SqlDbType.Int);
            sqlcmd.Parameters.Add("@p1", SqlDbType.NVarChar);
            sqlcmd.Parameters.Add("@p2", SqlDbType.NVarChar);
            sqlcmd.CommandType = CommandType.Text;
            sqlcmd.Connection = sqlconn;
            sqlconn.Open();
            try
            {
                //循環插入1000條數據,每次插入100條,插入10次。  
                for (int multiply = 0; multiply  10; multiply++)
                {
                    for (int count = multiply * 100; count  (multiply + 1) * 100; count++)
                    {
 
                        sqlcmd.Parameters["@p0"].Value = count;
                        sqlcmd.Parameters["@p1"].Value = string.Format("User-{0}", count * multiply);
                        sqlcmd.Parameters["@p2"].Value = string.Format("Pwd-{0}", count * multiply);
                        sw.Start();
                        sqlcmd.ExecuteNonQuery();
                        sw.Stop();
                    }
                    //每插入10萬條數據后,顯示此次插入所用時間  
                    Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
                }
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        #endregion

循環插入1000條數據,每次插入100條,插入10次,效率是越來越慢。

二.較快速的Bulk插入方式:

使用使用Bulk插入[ 較快 ]

        //使用Bulk插入的情況 [ 較快 ]
        #region [ 使用Bulk插入的情況 ]
        static void BulkToDB(DataTable dt)
        {
            Stopwatch sw = new Stopwatch();
            SqlConnection sqlconn = new SqlConnection("server=.;database=BulkTestDB;user=sa;password=123456;");
            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)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                sqlconn.Close();
                if (bulkCopy != null)
                {
                    bulkCopy.Close();
                }
            }
        }
        static DataTable GetTableSchema()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[] { 
                new DataColumn("Id",typeof(int)),
                new DataColumn("UserName",typeof(string)),
                new DataColumn("Pwd",typeof(string))
            });
            return dt;
        }
        static void BulkInsert()
        {
            Console.WriteLine("使用簡單的Bulk插入的情況");
            Stopwatch sw = new Stopwatch();
            for (int multiply = 0; multiply  10; multiply++)
            {
                DataTable dt = GetTableSchema();
                for (int count = multiply * 100; count  (multiply + 1) * 100; count++)
                {
                    DataRow r = dt.NewRow();
                    r[0] = count;
                    r[1] = string.Format("User-{0}", count * multiply);
                    r[2] = string.Format("Pwd-{0}", count * multiply);
                    dt.Rows.Add(r);
                }
                sw.Start();
                BulkToDB(dt);
                sw.Stop();
                Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
            }
        }
        #endregion

循環插入1000條數據,每次插入100條,插入10次,效率快了很多。

三.使用簡稱TVPs插入數據

打開sqlserrver,執行以下腳本:

--Create Table Valued  
CREATE TYPE BulkUdt AS TABLE  
  (Id int,  
   UserName nvarchar(32),  
   Pwd varchar(16))  

成功后在數據庫中發現多了BulkUdt的緩存表。

使用簡稱TVPs插入數據

        //使用簡稱TVPs插入數據 [最快]
        #region [ 使用簡稱TVPs插入數據 ]
        static void TbaleValuedToDB(DataTable dt)
        {
            Stopwatch sw = new Stopwatch();
            SqlConnection sqlconn = new SqlConnection("server=.;database=BulkTestDB;user=sa;password=123456;");
            const string TSqlStatement =
                  "insert into BulkTestTable (Id,UserName,Pwd)" +
                  " SELECT nc.Id, nc.UserName,nc.Pwd" +
                  " FROM @NewBulkTestTvp AS nc";
            SqlCommand cmd = new SqlCommand(TSqlStatement, sqlconn);
            SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
            catParam.SqlDbType = SqlDbType.Structured;
            catParam.TypeName = "dbo.BulkUdt";
            try
            {
                sqlconn.Open();
                if (dt != null  dt.Rows.Count != 0)
                {
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("error>" + ex.Message);
            }
            finally
            {
                sqlconn.Close();
            }
        }
        static void TVPsInsert()
        {
            Console.WriteLine("使用簡稱TVPs插入數據");
            Stopwatch sw = new Stopwatch();
            for (int multiply = 0; multiply  10; multiply++)
            {
                DataTable dt = GetTableSchema();
                for (int count = multiply * 100; count  (multiply + 1) * 100; count++)
                {
                    DataRow r = dt.NewRow();
                    r[0] = count;
                    r[1] = string.Format("User-{0}", count * multiply);
                    r[2] = string.Format("Pwd-{0}", count * multiply);
                    dt.Rows.Add(r);
                }
                sw.Start();
                TbaleValuedToDB(dt);
                sw.Stop();
                Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
            }
            Console.ReadLine();  
        }
        #endregion

循環插入1000條數據,每次插入100條,插入10次,效率是越來越慢,后面測試,將每次插入的數據量增大,會更大的體現TPVS插入的效率。

到此這篇關于SQL Server批量插入數據案例詳解的文章就介紹到這了,更多相關SQL Server批量插入數據內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • SQL Server 批量插入數據的完美解決方案
  • SQLServer2008存儲過程實現數據插入與更新
  • Python實現讀取SQLServer數據并插入到MongoDB數據庫的方法示例
  • SQLServer中防止并發插入重復數據的方法詳解
  • 詳解C#批量插入數據到Sqlserver中的四種方式

標簽:濟寧 濟源 臺州 廣東 泰安 武威 汕頭 安徽

巨人網絡通訊聲明:本文標題《SQL Server批量插入數據案例詳解》,本文關鍵詞  SQL,Server,批量,插入,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server批量插入數據案例詳解》相關的同類信息!
  • 本頁收集關于SQL Server批量插入數據案例詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: japanese70成熟老妇| 叶子楣玉蒲团在线观看| 色狠狠色综合久久久| 穿裙子不让穿内裤小黄文| 饭团影院| 飘雪影视在线观看免费完整版中文| 特黄A三级三级三级视频| 久久久久免费精品国产| 国产三级在线观看完整版| 又黄又爽又刺激的免费视频动漫网站| 大尺度男同| 公主被绑住扒开双乳折磨小说| 日本免费一区二区三区视频观看 | 女人与拘做受全过程免费视频| 人久热欧美在线观看量量| 故意穿暴露被强好爽H漫画| 国产91热爆TS人妖月奴| 日本无码一级A片毛片视频| ?国产嫩草影院久久久久| 亚洲欧洲精品一区二区三区波多野| 亚洲 无码 制服 丝袜 自拍 | 亚洲Va韩国Va欧美va| 国产肥女bbwbbw| aaaa毛片| 一站式建筑企業服務| 日韩欧美1区| 717午夜伦伦电影理论片| 国产又白又小又紧又急又爽| 欲妇荡岳丰满大乳无码久久久久| 国产一级婬片A片AAA毛片红楼| 美女福利一区| 免费一级毛片完整版在线看| 国产精品久久久久久久圣徒会长| 娇妻精灌孕NP| 成年人性生活片| 伊人久久精品中文字幕教师参加国际电工大赛 | 啊啊啊啊不要| 惩罚屁股撅高扒开打臀缝| 国产精品久久久久久精品毛片牛奶 | 王曼丽的足奴训练1| 天美麻花星空mv免费播放|