【发布时间】:2014-06-21 19:55:49
【问题描述】:
阅读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。
【问题讨论】:
-
如果您只是在 SSMS 中工作,那么可以选择控制可以返回多少 XML 数据。 1MB、2MB、5MB 或无限。见工具 |选项 |查询结果 | SQL 服务器 |结果到网格 | XML 数据。它没有“Results to File”选项。但也许您可以将查询运行到 Grid,然后保存结果?
-
如果你只使用 SSMS 那就可以了,但是我需要使用批处理文件来自动化这个过程。 SSMS 设置对 sqlcmd 结果没有影响。还是谢谢!
-
我用 BCP 来做这样的事情。这是一个 BCP 示例:stackoverflow.com/a/2586615/822072
-
是的,这也是一种可能,我尝试了 BCP,但没有成功,但刚刚发现 xp_cmdshell 没有激活,如果我修复它,看看它会做什么。我也会尝试使用 SSIS 包。 excel-sql-server.com/…
-
在用尽 sqlcmd.exe 和 SSMS 的所有可见选项后,我编写了一个 Java 程序来提取我需要的 XML 列。几乎不是一个通用的解决方案,但它完成了这项工作。
标签: xml sql-server-2008 tsql batch-file for-xml-path