簡體   English   中英

參數化多行插入到SQL Server

[英]Parameterized Multi-Row Insert into SQL Server

我面臨一種情況,我需要一次將多達17,000行插入到SQL Server數據庫中。 我提出了兩種方法來實現此目的,但是我因使用C#中的查詢參數化而陷入困境。

一個警告:我擔心性能,但是不排除所有其他問題-如果我正在執行的操作需要8分鍾,那么我是否還要再添加5秒還是10秒來插入數據,並不是真的物。 如果在初始操作之外再花費10分鍾插入數據,那就太麻煩了。

選項1:多行插入(分塊)

第一種選擇是進行簡單的多行插入:

INSERT INTO MyTable (FirstName, LastName, Age)
   VALUES
      ('Bob', 'Smith', 24),
      ('Sally', 'Jones', 32),
      ('Jennifer', 'Johnson', 23)

我將通過類似這樣的方式建立一些這樣的查詢。 (我是在腦海中寫這本書的,所以這里肯定有一個錯誤。這並不重要-只是為了說明我的觀點):

var queriesNeeded = people.Count / 250;

for (int i = 0; i < queriesNeeded; i++)
{
   var records = people.Skip(i * 250).Take(250);
   BuildAndExecuteQuery(records);
}

// Handle anything left over
var leftoverRecords = people.Skip(queriesNeeded * 250);
BuildAndExecuteQuery(leftoverRecords);

但是,盡管我知道如何對基本的單行INSERT進行參數化,但我不知道如何對其中可以包含未知數量變量的INSERT進行參數化。 有沒有辦法做到這一點? 我將如何為此創建我的SqlCommand

選項2:SqlBulkCopy類

或者...我可以走SqlBulkCopy路線。 我在這里唯一的問題是,我找不到任何指示如何參數化此參數的東西,或者甚至不需要。 我是否需要擔心轉義數據或在此處處理參數?

在此處進行內存內批量復制的經驗不多,但是我可以肯定地回答:

我不知道如何對可能具有未知數量變量的INSERT進行參數化。

通過在將參數添加到查詢的同一循環中添加參數來完成此操作。

要擴展您的偽代碼,您可以替換為:

   BuildAndExecuteQuery(records);

用這樣的東西:

foreach record in records
{
   Add parameter(s) to the query
   Add the same parameter(s) to the command's Parameters collection
}
ExecuteQuery

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM