通过批处理脚本运行 SQLCMD,从存储的事务创建格式化的 XML 文件



我正在尝试使用 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,16 层,状态 1未提供描述

如果我不使用 :XML ON,那么我会得到看起来像表格格式的输出,它包含一个标题以及仅第一条记录,但不是全部(它被截断)。

我的问题是,如何使 XML 文件中的输出实际上看起来像 XML 并且不被截断?

提前非常感谢!

这种方法对我有用。我从 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

并更换您需要<>

在您的情况下,您有存储过程。也许会引起问题?但是你可以尝试这样的东西;

USE<DB_NAME>
DECLARE @XMLV XML
EXEC @XMLV = EXEC StoredProcedure
SELECT @XMLV
FOR XML PATH('')

我知道这个问题很老了,但也许它会帮助某人。

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

最新更新