久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL中怎么批量插入數據

185次閱讀
沒有評論

共計 3804 個字符,預計需要花費 10 分鐘才能閱讀完成。

SQL 中怎么批量插入數據,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1. 創建表。

2. 創建表值參數類型

我們打開查詢分析器,然后在查詢分析器中執行下列代碼:

Create Type PassportTableType as Table(PassportKey nvarchar(50))

執行成功以后,我們打開企業管理器,按順序依次展開下列節點 – 數據庫、展開可編程性、類型、用戶自定義表類型,就可以看到我們創建好的表值類型了如下圖所示:

說明我們創建表值類型成功了。

3. 編寫存儲過程

存儲過程的代碼為:復制代碼 代碼如下:
USE [TestInsert] GO /****** Object: StoredProcedure [dbo].[CreatePassportWithTVP] Script Date: 03/02/2010 00:14:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO — ============================================= — Author: Kevin — Create date: 2010-3-1 — Description: 創建通行證 — ============================================= Create PROCEDURE [dbo].[CreatePassportWithTVP] @TVP PassportTableType readonly AS BEGIN SET NOCOUNT ON; Insert into Passport(PassportKey) select PassportKey from @TVP END

可能在查詢分析器中,智能提示會提示表值類型有問題,會出現紅色下劃線(見下圖),不用理會,繼續運行我們的代碼,完成存儲過程的創建

4. 編寫代碼調用存儲過程。三種數據庫的插入方式代碼如下,由于時間比較緊,代碼可能不那么易讀,特別代碼我加了些注釋。復制代碼 代碼如下:
using System; using System.Diagnostics; using System.Data; using System.Data.SqlClient; using com.DataAccess; namespace ConsoleAppInsertTest {class Program { static string connectionString = SqlHelper.ConnectionStringLocalTransaction; // 數據庫連接字符串 static int count = 1000000; // 插入的條數 static void Main(string[] args) {//long commonInsertRunTime = CommonInsert(); //Console.WriteLine(string.Format( 普通方式插入 {1} 條數據所用的時間是 {0} 毫秒 , commonInsertRunTime, count)); long sqlBulkCopyInsertRunTime = SqlBulkCopyInsert(); Console.WriteLine(string.Format( 使用 SqlBulkCopy 插入 {1} 條數據所用的時間是 {0} 毫秒 , sqlBulkCopyInsertRunTime, count)); long TVPInsertRunTime = TVPInsert(); Console.WriteLine(string.Format( 使用表值方式(TVP)插入 {1} 條數據所用的時間是 {0} 毫秒 , TVPInsertRunTime, count)); } /// summary /// 普通調用存儲過程插入數據 /// /summary /// returns /returns private static long CommonInsert() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); string passportKey; for (int i = 0; i count; i++) {passportKey = Guid.NewGuid().ToString(); SqlParameter[] sqlParameter = {new SqlParameter( @passport , passportKey) }; SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, CreatePassport , sqlParameter); } stopwatch.Stop(); return stopwatch.ElapsedMilliseconds;} /// summary /// 使用 SqlBulkCopy 方式插入數據 /// /summary /// param name= dataTable /param /// returns /returns private static long SqlBulkCopyInsert() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); DataTable dataTable = GetTableSchema(); string passportKey; for (int i = 0; i count; i++) {passportKey = Guid.NewGuid().ToString(); DataRow dataRow = dataTable.NewRow(); dataRow[0] = passportKey; dataTable.Rows.Add(dataRow); } SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connectionString); sqlBulkCopy.DestinationTableName = Passport sqlBulkCopy.BatchSize = dataTable.Rows.Count; SqlConnection sqlConnection = new SqlConnection(connectionString); sqlConnection.Open(); if (dataTable!=null dataTable.Rows.Count!=0) {sqlBulkCopy.WriteToServer(dataTable); } sqlBulkCopy.Close(); sqlConnection.Close(); stopwatch.Stop(); return stopwatch.ElapsedMilliseconds;} private static long TVPInsert() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); DataTable dataTable = GetTableSchema(); string passportKey; for (int i = 0; i count; i++) {passportKey = Guid.NewGuid().ToString(); DataRow dataRow = dataTable.NewRow(); dataRow[0] = passportKey; dataTable.Rows.Add(dataRow); } SqlParameter[] sqlParameter = { new SqlParameter( @TVP , dataTable) }; SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, CreatePassportWithTVP , sqlParameter); stopwatch.Stop(); return stopwatch.ElapsedMilliseconds;} private static DataTable GetTableSchema() { DataTable dataTable = new DataTable(); dataTable.Columns.AddRange(new DataColumn[] {new DataColumn( PassportKey) }); return dataTable; } } }

比較神秘的代碼其實就下面這兩行,該代碼是將一個 dataTable 做為參數傳給了我們的存儲過程。簡單吧。

SqlParameter[] sqlParameter = { new SqlParameter( @TVP , dataTable) };SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure,  CreatePassportWithTVP , sqlParameter);
5. 測試并記錄測試結果
第一組測試,插入記錄數 1000
第二組測試,插入記錄數 10000
第三組測試,插入記錄數 1000000

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計3804字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 邹城市| 石嘴山市| 南川市| 连南| 阿尔山市| 开封市| 凯里市| 宕昌县| 西乌珠穆沁旗| 繁峙县| 宁南县| 龙州县| 丽水市| 横山县| 周宁县| 加查县| 五原县| 丽江市| 呼伦贝尔市| 富源县| 响水县| 江口县| 永靖县| 恭城| 尼勒克县| 乡宁县| 尉犁县| 邮箱| 海安县| 穆棱市| 赞皇县| 积石山| 城固县| 汕头市| 新乡市| 搜索| 桂平市| 怀仁县| 钦州市| 临海市| 红原县|