1

下面的代码为我创建了一个显示为链接的 XML 文件,如图 1 所示

运行选择 @xmlentire 时的结果

DECLARE @xmlentire AS XML = (
select (select @xmlheader as returnXml),
(select @xmlbody as returnXml)
for xml path ('IndirectSalesMessage'))

select @xmlentire
SELECT @loop = @loop + 1

返回给我的内容很棒。当我点击那个链接时,我得到了我需要的一切。问题是我想自动将这些内容导出到 XML 文件。现在我必须单击链接,然后手动将文件另存为 XML 文件。我想要一个程序自动执行此操作。我已经尝试过 BCP,但 BCP 不允许我使用 XML 变量。

问题是这个程序应该循环 200-250 次,每次都创建一个文件。为每次运行手动保存它是不可行的。SELECT @loop = @loop + 1在将内容保存@xmlentire到 xml 文件然后移动到下一个文件之前,我需要一个命令。有人可以帮忙吗?

图 2 显示了手动保存后文件的外观。我需要的一切都是完美的。我只需要@xmlentire自动保存为 xml 文件。

在此处输入图像描述

4

1 回答 1

0

像这样的命令应该将查询的结果写入文件。请注意该-w选项,因为 XMLunicode (UCS-2)总是...

DECLARE @FileName NVARCHAR(250)='C:\SomeDir\SomeFile.xml'; 
SET @cmd = 'bcp  "select * from master.sys.types FOR XML PATH(''Type''),ROOT(''root'')" ' + 
           'queryout "' +  @FileName + '" -w -T -S ' + @@SERVERNAME
EXEC master..XP_CMDSHELL @cmd;

您可以先将文件名设置为变量。

我的建议:

创建一个表并将所有 XML 连同适当的文件名一起写入其中。然后使用 a CURSOR(这是一个好主意的罕见情况之一)并将它们写出来。这使您可以将所有 XML 保存在临时表中,并在合适的时候进行导出。如果出现问题,您可以设置IsWritten标志并存储错误消息...

于 2017-12-30T20:56:09.373 回答