使用 BCP 从 SQL 服务器生成 XML 文件时出现问题

Issue with generating XML file from SQL Server using BCP

我正在尝试使用 BCP 从视图中生成 XML 文件。 View 有大约 2100 万条记录。当我尝试生成 XML 时,BCP 生成空文件。我用大约 400 万条记录检查了这个过程,它工作正常。

请参考以下代码:

DECLARE @bcpCommand VARCHAR(8000), @FileName VARCHAR(100) = 'Customer_20190830.xml';
SET @bcpCommand
    = 'bcp "SELECT CAST(''<?xml version=""1.0"" ?>'' AS VARCHAR(100)) + CAST((SELECT * FROM dbo.vw_CustomersFOR XML PATH (''Customer''), TYPE, ROOT(''Customers'')) AS VARCHAR(MAX));" queryout E:\Share\Customer\'
      + @FileName + ' -S -d Test-T -c';
PRINT @bcpCommand;
EXEC master..xp_cmdshell @bcpCommand;

从SQL服务器写入XML对象有上限吗?有什么解决办法吗?我不想生成多个文件。

将整个 table 加载到 nvarchar(max) 并将其发送给客户端。这不是一种可无限扩展的方法。

以下是使用 PowerShell 将任意数量的 XML 流式传输到文件的方法:

# for xml query, not using the TYPE directive, for streaming large results
$sql = "select * from sys.objects for xml path, root('root')"
$fn = "c:\temp\output.xml"
$constr = "Server=localhost;Database=tempdb;integrated security=true"

$con = new-object System.Data.SqlClient.SqlConnection
$con.ConnectionString = $constr 
$con.Open()

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

$xr = $cmd.ExecuteXmlReader()
$fs = [System.IO.File]::OpenWrite($fn)
$xw = [System.Xml.XmlWriter]::Create($fs)

$xw.WriteNode($xr,$true)

$xw.Close()
$fs.Close()
$xr.Close()
$con.Close()