我想将表从SQL Server 2012导出到XML文件。我发现nice answer和here如何从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文件?
答案 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)
答案 2 :(得分:1)
在SQL Server 2012中完成这项工作是一件痛苦的事。最后我最终将其更新到SQL Server 2014,因为sqlcmd中已经支持SQL UTF-8文件。
运行以下:
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,'