下面的代码创建了一个XML文件,显示为image1
中显示的链接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文件。
答案 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
标志并存储错误消息...