在阅读one answer和second answer以及infopage on 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。
答案 0 :(得分:5)
今天我遇到了同样的问题,我使用了-y0选项。我的输出现在看起来正确。以为我会发布我的发现,这样可能会帮助其他人遇到同样的事情。
sqlcmd -Sxxxxxxx -E -dmaster -h-1 -y0 -Q" my query that produces long results in here;" > "D\:out.txt"
-h-1
也会删除列标题。
答案 1 :(得分:-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,并且它将剥离任何声明。
修改: