将存储过程的结果(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/