我有一個(gè)參數(shù)化查詢,出于演示目的,我們假設(shè)它是SELECT Id, Name FROM People WHERE Age >= @Age假設(shè)這可能是數(shù)百萬條記錄,我想將這些記錄批量加載到 table 中Population (Id, Name)。通過遵循我看到的大多數(shù)示例,SqlBulkCopy我將使用第一個(gè)查詢來獲取數(shù)據(jù)表,然后我可以將該數(shù)據(jù)表批量加載到Population但我不需要讀取查詢,將其放入內(nèi)存中只是為了再次寫入。本質(zhì)上,我希望將查詢批量加載到表中,而不必在 C# 中讀取查詢,所有 IO 都應(yīng)該發(fā)生在數(shù)據(jù)庫(kù)中。我該怎么做?這是我的嘗試:using (var conn = new SqlConnection(SomeConnectionString))using (var cmd = conn.CreateCommand()){ conn.Open(); cmd.CommandText = "SELECT Id, Name FROM People WHERE Age >= @Age"; cmd.Parameters.AddWithValue("@Age", 10); using (var reader = cmd.ExecuteReader()) using (SqlBulkCopy bulkcopy = new SqlBulkCopy(SomeConnectionString)) { bulkcopy.DestinationTableName = "[Population]"; bulkcopy.WriteToServer(reader); bulkcopy.Close(); }}我不確定是否ExecuteReader只是設(shè)置一個(gè)指針開始讀取或?qū)嶋H將查詢讀入內(nèi)存。在有人建議執(zhí)行查詢之前INSERT INTO Population SELECT Id, Name FROM People WHERE Age >= @Age知道我要批量加載的查詢將作為變量(帶有參數(shù))進(jìn)入,因?yàn)槲也恢啦樵儗⑹鞘裁?,只是我希望它能夠很好地映射并且我希望它批量加載。
1 回答

浮云間
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
根據(jù)評(píng)論:
如果沒有 MARS,除了使用 DataTable 并將其用于 SqlBulkCopy 之外別無他法,因?yàn)楫?dāng)數(shù)據(jù)讀取器仍處于打開狀態(tài)時(shí),您無法使用相同的連接進(jìn)行批量復(fù)制。您必須關(guān)閉第一個(gè)連接才能稍后與 SqlBulkCopy 一起使用。
- 1 回答
- 0 關(guān)注
- 331 瀏覽
添加回答
舉報(bào)
0/150
提交
取消