如何将SQL查询结果保存到磁盘上的XML文件中

时间:2016-08-06 20:40:19

标签: sql-server xml sql-server-2012

我想将表从SQL Server 2012导出到XML文件。我发现nice answerhere如何从SQL Server数据库查询中获取XML结果,但我仍然不知道如何将此结果物理保存到文件中。

SQL查询是:

SELECT [Created], [Text]
FROM [db304].[dbo].[SearchHistory]
FOR XML PATH('Record'), ROOT('SearchHistory')

我使用Microsoft SQL Server Management Studio来执行此结果。我在结果窗口中看到了XML,但我无法保存它。

在上下文菜单中有“Save Result As ..”,但有98900行,我使用此选项耗尽了8GB内存。

有没有办法将此查询直接保存到磁盘上的XML文件?

4 个答案:

答案 0 :(得分:8)

您也可以使用SQL Server的扩展存储过程将其导出到xml文件。

但是您需要先配置sql server才能使用它。

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE

在SQL Server中启用xp_cmdshel后。您可以使用以下命令将数据导出到xml文件。

EXEC xp_cmdshell 'bcp "SELECT [Created], [Text] FROM [db304].[dbo].[SearchHistory] FOR XML PATH(''Record''), ROOT(''SearchHistory'')" queryout "C:\bcptest.xml" -T -c -t,'

答案 1 :(得分:5)

您始终可以使用SSMS中的“结果存档”选项:

enter image description here

那应该将查询执行的结果直接输出到磁盘上的文件

答案 2 :(得分:1)

在SQL Server 2012中完成这项工作是一件痛苦的事。最后我最终将其更新到SQL Server 2014,因为sqlcmd中已经支持SQL UTF-8文件。

  1. 创建SQL查询并将其保存到文件中。
  2. 运行以下:

    sqlcmd -S -U sa -P sapassword -i inputquery_file_name -C65001 -o outputfile_name

答案 3 :(得分:1)

这个例子对我来说适用于最大 2GB 的结果集。

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE

DROP TABLE IF EXISTS ##AuditLogTempTable

SELECT A.MyXML
INTO ##AuditLogTempTable
FROM
(SELECT CONVERT(nvarchar(max), 
    (
            SELECT
                A.*
            FROM
                [dbo].[AuditLog] A
                JOIN ImportProviderProcesses IPP ON IPP.ImportType = 'Z' 
                  AND A.OperatorID = IPP.OperatorID 
                  AND A.AuditTypeID in ( '400','424','425' )
            WHERE
                A.[PostTime] >= IPP.StartTime
                AND A.[PostTime] <= dateadd(second, 90, IPP.StartTime) 
                FOR XML PATH('Record'), ROOT('AuditLog')
        )
    , 0
    )   AS MyXML
) A

EXEC xp_cmdshell 'bcp "SELECT MyXML FROM ##AuditLogTempTable" queryout "D:\bcptest1.xml" -T -c -t,' 
    
相关问题