使用 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()
我正在尝试使用 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()