将XML变量的内容写入文件

时间:2017-12-30 15:55:01

标签: sql-server xml variables export-to-xml

下面的代码创建了一个XML文件,显示为image1

中显示的链接

Result when select @xmlentire is run

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文件。

enter image description here

1 个答案:

答案 0 :(得分:0)

这样的命令应该将查询的结果写入文件。请注意-w选项,因为XML总是unicode (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与适当的文件名一起写入其中。然后使用CURSOR(这是一个好主意的罕见情况之一)并将其写出来。这允许您将所有XML保留在临时表中,并在适合时进行导出。如果出现问题,您可以设置IsWritten标志并存储错误消息...