8

在阅读了一个答案第二个答案以及sqlcmd 上的信息页后,我仍然无法使以下工作。

我正在尝试使用批处理文件中的 sqlcmd 将结果查询到 xml 文件中。

批处理文件如下所示:

sqlcmd -R -d DBName -i "c:\inputquery.sql" -h-1 -y 0 -o "c:\outputfile.xml"

简化的 sql 查询是:

:XML ON
SELECT '<?xml version="1.0" encoding="UTF-8"?>' +
CAST((
SELECT Columns FROM Table
FOR XML PATH ('Product'), ROOT('Products')
) 
AS NVARCHAR(MAX))

输出是一个大约 1025Kb 的 xml 文件,带有一个截断的字符串。我认为它会截断为 1mb,但你怎么能防止这种情况呢?目标是将完整的查询结果放入 xml 文件中。据我所知,所有选项都已使用。顺便使用TSQL SSMS2008。

4

2 回答 2

16

我今天遇到了同样的问题,我使用了 -y0 选项。我的输出现在看起来正确。以为我会发布我的发现,这样它可能会帮助其他人遇到同样的事情。

sqlcmd -Sxxxxxxx -E -dmaster -h-1 -y0 -Q" my query that produces long results in here;" > "D\:out.txt"

-h-1也删除列标题。

于 2016-05-31T14:21:05.300 回答
-1

您需要将 XML 输出为 XML 类型。通常,除了 . 之外,还使用TYPE指令来完成FOR XML。但是,如果您想添加 Xml 声明,则必须将所有内容放入一个 xml 变量中,然后选择它。前任:

declare @xml as xml
select @xml = cast(('<?xml version="1.0" encoding="UTF-16"?>'+cast((SELECT Columns FROM Table FOR XML PATH ('Product'), ROOT('Products')) as nvarchar(max))) as xml)

select @xml

编辑:对不起。添加 Xml 声明将不起作用,因为 Sql 以其本机编码 (UTF-16) 将流显示为 XML,并且它将剥离任何声明。

编辑

于 2014-07-21T17:54:47.940 回答