我正面臨一種情況,我需要一次將多達17,000行插入到SQL Server數據庫中。我已經想出了兩種方法來做到這一點,但是我被C#中的查詢參數化絆住了。參數化的多行插入SQL Server
一個警告:我擔心表現,但不排除其他 - 如果我正在做的操作需要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路線。我在這裏唯一的問題是,我找不到任何指示如何參數化的東西,或者我甚至需要。我是否需要擔心轉義數據或處理參數?
是記錄了數據庫中的表或其他一些輸入? –
使用表值參數,這是非常簡單的。 https://docs.microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine –
或SqlBulkCopy與DataTable,這意味着您不必擔心轉義任何東西。 –