sql-server - 将XML直接从SQL Server输出到文件

标签 sql-server xml powershell

将存储过程的结果(XML)输出到文件。

我在SQL Server中有一个创建XML文件的存储过程。它当前显示生成的XML,我必须手动将其另存为文件。

我试图从Powershell调用as in this question来调用该过程,它适用于较小的文件,但不适用于较大的文件(> 1gb文件),因为Powershell尝试将整个内容存储为变量,并且很快耗尽了内存。

我将其作为一个新问题进行讨论,因为我认为应该在SQL Server中有一种方法(或者使用Powershell更好的方法)。

最佳答案

您不应该在这里使用存储过程。只需使用更好的PowerShell。您可以stream large types to and from SQL Server with SqlClient。因此,您只需要下拉列表并使用ADO.NET,而不是使用invoke-sqlcmd便捷方法。

例如:

$conString = "server=localhost;database=tempdb;integrated security=true"

$sql = @"

select top (1000*1000) * 
from sys.messages m
cross join sys.objects o
for xml auto

"@

$fn = "c:\temp\out.xml"

$con = new-object System.Data.SqlClient.SqlConnection
$con.connectionstring = $conString
$con.Open()

$cmd = $con.createcommand()
$cmd.CommandText = $sql 
$cmd.CommandTimeout = 0

$rdr = $cmd.ExecuteXmlReader()
$w = new-object System.Xml.XmlTextWriter($fn,[System.Text.Encoding]::UTF8)
$w.WriteNode($rdr,$true)
$w.Close()
$rdr.Close()

write-host "Process Memory: $( [System.GC]::GetTotalMemory($false) )"
write-host "File Size: $( (ls $fn)[0].Length )"

输出
Process Memory: 34738200
File Size: 468194885

关于sql-server - 将XML直接从SQL Server输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56293969/

相关文章:

mysql - SQL 更新错误 + WHERE 子句说明

java - 将 Element 对象转换为 Int?

powershell - 将 .vhd 镜像从 Azure 下载到本地计算机,然后上传到另一个 Azure 帐户

powershell - 如何通过 powershell 运行 win32-openssh? (使用来自 chocolatey 供应商的安装包安装)

PowerShell脚本模拟 "Enter"按下

mysql - 如何创建用于插入/更新的数据库级触发器

c# - 如何从不在默认 DBO 架构中的 SQL Server 数据库表中读取数据

java - 使用 xml dom 解析器获取元素

javascript - XmlService 和 importxml 的区别

sql-server - 优化位置更新存储