我有一個數據集在ADO.NET中包含來自用戶端的多條記錄。我需要將單個查詢中的所有行插入到數據庫中,以避免多個查詢如何使用單個查詢將多個記錄從數據集插入到SQL Server 2005中?
回答
也許像大容量副本這樣的答案會是一個答案。以下代碼項目中的示例顯示瞭如何使用DataTable執行此操作,但您應該可以更改該示例以使用DataSet。
以下是涵蓋在SQL Server中的註釋和執行的代碼的一小部分(取自CodeProject)。
要注意的關鍵部分是bulkcopy.WriteToServer(Source Table);是的sourceTable會是DataSet的一部分,你會傳遞給它
//First create a connection string to destination database
string connectionString;
connectionString = <EM>YourConnectionString</EM>and
Initial Catalog=TestSMODatabase";
//Open a connection with destination database;
using (SqlConnection connection =
new SqlConnection(connectionString))
{
connection.Open();
//Open bulkcopy connection.
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(connection))
{
//Set destination table name
//to table previously created.
bulkcopy.DestinationTableName = "dbo.TestTable";
try
{
bulkcopy.WriteToServer(SourceTable); // SourceTable would come from your DataSet
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
connection.Close();
}
}
雖然SqlBulkCopy
作品對於批量插入,你不能做批量更新。這對您來說可能會也可能不是問題,但無論如何您都可以使用存儲過程,該存儲過程利用OPENXML來允許批量插入和更新。您還需要sp_xml_preparedocument和sp_xml_removedocument。
此方法的另一個重大優勢是您可以使用OUTPUT子句獲得您剛剛批量插入的實體的ID。
散裝插頁的示例。
假設您已定義要存儲的proc參數@p_XmlData VARCHAR(MAX)
定義要插入或更新的數據。對於需要傳遞的XML的一個例子,你可以這樣做:
SELECT TOP 1 *, 0 AS __ORDERBY FROM dbo.YourEntity AS YourEntity FOR XML AUTO, ROOT('ROOT')
然後存儲過程將是這個樣子
DECLARE @hDoc INT
EXEC sp_xml_preparedocument @hDoc OUTPUT, @p_XmlData
INSERT INTO dbo.YourEntity
(
[Field1],
[Field2]
)
SELECT
XMLData.Field1,
XMLData.Field2
FROM OPENXML (@hdoc, 'ROOT/YourEntity', 1)
WITH
(
[Field1] int,
[Field2] varchar(50),
[__ORDERBY] int
) AS XMLData
EXEC sp_xml_removedocument @hDoc
我的回答很好的擴展+ 1 – kevchadders 2010-10-07 08:34:50
我建議你從數據集把你的數據表來使用Table Valued參數的存儲過程。然後,您可以執行一個插入語句來使用數據集記錄填充數據庫。
- 1. 如何從Vb.net插入多個記錄到SQL Server 2005表?
- 2. SQL Server 2005:用單個查詢插入多行
- 3. 如何將61000個數據對象插入到sql server 2005中?
- 4. SQL 2005將多個記錄到一個
- 5. 在sql server中將數據從多個記錄轉換爲單個記錄
- 6. 如何將記錄插入到sql server express數據庫表中?
- 7. 如何使用JSON將記錄插入到SQL數據庫中
- 8. 使用單個查詢將多個記錄插入到webSQL表中,對象數組中的數據
- 9. 使用for循環插入多個記錄到SQL Server數據庫中
- 10. 轉換多個記錄單記錄使用SQL查詢10個LAC數據
- 11. 如何將XML數據插入到表中的SQL Server 2005
- 12. 插入多個值到一個單元格使用SQL 2005
- 13. 如何使用單個查詢插入到多個表中?
- 14. 將數據插入到幾個表 - 可能使用OUTPUT - SQL Server 2005中
- 15. 如何在單個查詢中將數據插入到多個表中 - Mysql
- 16. 使用單個sql查詢在表中插入多個值
- 17. 將多個SQL Server 2005數據庫遷移到SQL Server 2008
- 18. 如何將多個記錄從gridview添加到SQL Server表中?
- 19. 從SQL Server 2005導入查詢的結果集到MS Excel中
- 20. 一個SQL Server 2005 Express的查詢,將每個數據庫
- 21. 使用存儲過程將多行插入到SQL Server 2005中
- 22. 使用單個查詢插入多條記錄
- 23. 如何使用c將行插入到SQL Server 2005中#
- 24. SQL Server 2012 - 從一個文本塊插入多個記錄
- 25. 在sql數據庫中插入多個記錄使用php
- 26. 插入到SQL Server 2005中
- 27. 如何在SQL Server 2005的插入查詢中使用select查詢
- 28. 如何在SQL Server 2005的值插入查詢中使用select查詢
- 29. 如何在一個SQLite查詢中插入多個記錄?
- 30. 從SQL Server中的兩個查詢合併數據2005
設置合適的BATCHSIZE和使用SqlBulkCopyOptions.TableLock可能會導致更好的性能。測試你的場景。有關詳細分析,請參閱http://sqlblog.com/blogs/alberto_ferrari/archive/2009/11/30/sqlbulkcopy-performance-analysis.aspx。 – 2010-10-07 08:17:22
@Winston - 感謝您的有用鏈接 – kevchadders 2010-10-07 08:33:13