我有一个数据集在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 server中将数据从多个记录转换为单个记录
- 5. 如何将记录插入到sql server express数据库表中?
- 6. 使用单个查询将多个记录插入到webSQL表中,对象数组中的数据
- 7. 如何使用JSON将记录插入到SQL数据库中
- 8. 使用for循环插入多个记录到SQL Server数据库中
- 9. 转换多个记录单记录使用SQL查询10个LAC数据
- 10. 如何将XML数据插入到表中的SQL Server 2005
- 11. 插入多个值到一个单元格使用SQL 2005
- 12. 如何在单个查询中将数据插入到多个表中 - Mysql
- 13. 将数据插入到几个表 - 可能使用OUTPUT - SQL Server 2005中
- 14. 如何将多个记录从gridview添加到SQL Server表中?
- 15. 使用单个查询插入多条记录
- 16. 将多个SQL Server 2005数据库迁移到SQL Server 2008
- 17. 从SQL Server 2005导入查询的结果集到MS Excel中
- 18. SQL Server 2012 - 从一个文本块插入多个记录
- 19. 如何使用多个if语句将记录插入到数据库中
- 20. 如何在SQL Server 2005的值插入查询中使用select查询
- 21. 如何在SQL Server 2005的插入查询中使用select查询
- 22. Oracle SQL - 如何插入多个记录
- 23. 从SQL Server中的两个查询合并数据2005
- 24. 将查询插入多个数据库
- 25. 将记录批量插入到SQL Server数据库中
- 26. 在Rails中将每个SQL查询记录到数据库中
- 27. 在SQL Server 2005中同时在同一个数据库中插入多个记录的问题
- 28. sql server 2005报告服务 - 如何在报告中使用多个数据集
- 29. 使用C#数据对象将记录插入到SQL Server数据库
- 30. 如何使用循环将多个查询插入到数据库表中?
设置合适的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