我正在尝试使用SQLCMD自动化在数据库中运行存储过程的过程。 SQL Server Management Studio 2008安装在Windows Server上,这一切都在尝试发生.SQLCMD将通过批处理脚本调用,并被告知执行存储过程并将输出保存到XML文件中。我无法显示存储过程,因为它具有敏感材料,但它包含FOR XML PATH('')的用法。
我从各种网站上阅读了几篇文章,人们说要使用:XML ON以实际XML格式输出,而不是以表格格式,以及“-h-1 -y 0”的开关确保输出不被截断。我试图通过批处理脚本运行SQLCMD,以便它可以全部自动化。
我当前的批处理脚本(变量都在脚本中的这一行之前定义):
sqlcmd -X -Q -h-1 -y 0 "EXEC %TransactionName%" -d %Database% -S %ServerInstance% -o "%OutFilename%_%currDATE%.xml"
我尝试在事务中添加:XML ON,以及创建一个单独的SQL脚本,内容如下:
Run_Transact.sql
:XML ON
EXEC storedProcedure
然后批处理文件将显示为:
sqlcmd -X -Q -h-1 -y 0 -i runTransact.sql -d %Database% -S %ServerInstance% -o "%OutFilename%_%currDATE%.xml"
我收回错误:
HResult 0x80004005,Level 16,State 1 没有提供说明
如果我不使用:XML ON,那么我得到的输出看起来像是表格格式,它包含一个标题以及只有第一条记录,但不是全部(它被截断)。
我的问题是如何让XML文件中的输出实际上看起来像XML而不是截断?
提前非常感谢!
答案 0 :(得分:0)
这种方法适合我。我从xml列中检索了2百万行xml usinq sqlcmd。我的步骤:
1)使用查询创建文件,这是我的:
:XML ON
USE <DB_NAME>
SELECT TOP 1 <COLUMN_NAME> FROM <TABLE>
WHERE <SOMETHING>
FOR XML PATH('')
2)在sqlcmd
中执行命令sqlcmd -d <DB_NAME> -i <PATH>\query.sql >result.txt
并在&lt;&gt;
中替换您需要的内容在您的情况下,您有存储过程。也许会引起问题?但是你可以尝试类似的东西;
USE<DB_NAME>
DECLARE @XMLV XML
EXEC @XMLV = EXEC StoredProcedure
SELECT @XMLV
FOR XML PATH('')
我知道这个问题已经过时了,但也许会有所帮助。
答案 1 :(得分:-1)
SELECT ( SELECT 'White' AS Color1,
'Blue' AS Color2,
'Black' AS Color3,
'Light' AS 'Color4/@Special',
'Green' AS Color4,
'Red' AS Color5
FOR
XML PATH('Colors'),
TYPE
),
( SELECT 'Apple' AS Fruits1,
'Pineapple' AS Fruits2,
'Grapes' AS Fruits3,
'Melon' AS Fruits4
FOR
XML PATH('Fruits'),
TYPE
)
FOR XML PATH(''),
ROOT('SampleXML')
GO