我需要从SQL Server检索1.700.000行,然后我需要将它们写入XML文件。但是在一次这样做会很慢,因为文件的大小和那里有接近200万行,我想我应该一次读取1000行并写入它们,然后再读取下一个1000行。 ..没有窒息系统。
如何在C#中创建这种循环?如果我能得到这方面的帮助,那就太好了。谢谢
答案 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文件中重复使用。