我需要从SQL Server检索1.700.000行,然后我需要在C#中写入XML文件

时间:2017-11-03 18:15:44

标签: c#

我需要从SQL Server检索1.700.000行,然后我需要将它们写入XML文件。但是在一次这样做会很慢,因为文件的大小和那里有接近200万行,我想我应该一次读取1000行并写入它们,然后再读取下一个1000行。 ..没有窒息系统。

如何在C#中创建这种循环?如果我能得到这方面的帮助,那就太好了。谢谢

1 个答案:

答案 0 :(得分:0)

这一切都取决于您的行大小,但您可以尝试以下方法。

正如Matthew所建议的,考虑使用FOR XML子句 - 它允许在SQL服务器查询的结果中接收已经形成的XML字符串。

还要考虑使用BCP utility而不是编写自定义C#逻辑。

因此,完整的解决方案可能如下所示:

1)。创建一个返回XML的标量函数,

CREATE function [dbo].[FunctionThatReturnsXML]() 
RETURNS varchar(max) 
as
BEGIN

DECLARE @ReturnStr Varchar(max);

SET @ReturnStr = (
 SELECT [yourColumn] as '@Column'
   FROM [yourQuery]
   FOR XML PATH ('Item'), ROOT ('Root')
 )
  RETURN @ReturnStr;
END

虽然您可能需要使用TEXT,但我使用VARCHAR(MAX)。您也可以直接从BCP运行查询(参见下一步),而无需创建函数的开销,但这使它更加整洁。

2)。对您的服务器运行BCP命令(您应该考虑安全性和身份验证):

bcp.exe "select [dbo].[FunctionThatReturnsXML]()" queryout "C:\yourfolder\yourfile.xml" -c -T

后者可以放入BAT文件中重复使用。