目前,我们公司正在将应用程序迁移到云 (Azure),我们有一个命令行应用程序执行以下步骤。
- 下载一个文件,其中包含包含更新记录的压缩和签名 xml 文件列表。
- 是否有更新或新记录
- 下载压缩的 xml 文件
- 解压 xml 文件
- 取消对 xml 文件的签名
在存储过程中使用此脚本将每个 xml 插入临时表
声明 @bulkQuery nvarchar(max) = N'INSERT INTO #BulkTable 选择批量列 FROM Openrowset(Bulk ''' + @FilePath + ''', Single_Blob) X';
执行 sp_executesql @bulkQuery
将目标表与临时表合并。
但是,由于我发现 OpenRowSet 命令在 SQL Azure 中不可用(我认为这是由于 SQL Azure 数据库没有对文件的本地访问权限),因此我尝试了一种不同的方法:
使用 Web 作业,第 6 步是这样的:
- 6.1 将 xml 加载到 XmlDocument 对象中
- 6.2 对 XMLDocument 创建 linq 查询以组织记录
- 6.3 对于查询中的每条记录,使用 LINQ to SQL 进行插入。
事实是,第二种方法有效,但每个 xml 文件需要 3 小时,而旧应用程序需要 20 分钟才能处理所有 xml 文件。 (我忘了说,通常应用程序会下载4个xml文件,每个文件包含250,000条记录)
我知道第二种方法不是最好的方法,我一直在寻找如何改进它(正确的方法),但我还没有找到类似的东西。
希望你能帮助我, 多谢。
最佳答案
对于我来说,我会将 XML 文件上传到 Azure Blob 存储中,然后运行辅助角色来执行导入。
关于c# - 将大量 XML 插入 sql azure 数据库的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28350187/