我的SQL查询生成XML输出:
select 'TEST.kml' as name,
(select 'TEST' as name, (
select (
select top 10 issue as name,
null as description,
null as 'Point/coordinates',
(
select
null as altitudeMode,
Coordinates as 'coordinates'
for xml path('Polygon'), type)
from Mapping for xml path('Placemark'), type))
for xml path ('Line') , type)
for xml path ('Doc'), root('kml'))
我想将查询的输出保存为.XML文件到本地驱动器。请指教。
答案 0 :(得分:5)
不是最优雅的方式,但可以使用bulk copy program
和xp_cmdshell
来执行此操作。 SQL Server作为安全配置的一部分默认为xp_cmdshell
阻止,因此您需要首先启用该功能,BCP
要求您有权访问要创建文件的目录。
要启用xp_cmdshell
,您需要运行sp_configure
和RECONFIGURE
,请使用:
EXEC sp_configure'xp_cmdshell', 1
RECONFIGURE
GO
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
然后您可以运行以下命令:
EXEC xp_cmdshell 'bcp "SELECT * FROM [Database].dbo.[Table] FOR XML AUTO,
ELEMENTS" queryout "C:\test.xml" -c -T'
只需将您的查询添加到其中,并确保在表名周围添加[]
。
答案 1 :(得分:3)
使用bcp
是明确的选择,尤其是在处理大型数据集时。或者,您可以尝试使用SQL Management Studio
- Export Data
。
答案 2 :(得分:3)
要将远程查询的结果保存到本地文件,您可以像以下示例一样使用Powershell脚本:
$connection = New-Object System.Data.SqlClient.SqlConnection("Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=SSPI")
$command = New-Object System.Data.SqlClient.SqlCommand(@("
select 'TEST.kml' as name,
(select 'TEST' as name, (
select (
select top 10 issue as name,
null as description,
null as 'Point/coordinates',
(
select
null as altitudeMode,
Coordinates as 'coordinates'
for xml path('Polygon'), type)
from Mapping for xml path('Placemark'), type))
for xml path ('Line') , type)
for xml path ('Doc'), root('kml');"), $connection);
$connection.Open();
$command.ExecuteScalar() | Out-File -FilePath "C:\KmlFiles\YourFile.kml";
$connection.Close();
通过将脚本保存到带有" .ps1"的文件,可以从命令提示符执行脚本。扩展并使用如下命令:
powershell -ExecutionPolicy RemoteSigned -File "C:\PowershellScripts\ExampleExport.ps1"
可以使用Windows任务计划程序任务计划此命令以自动导出。或者,使用带有Powershell或CmdExec步骤的SQL Server代理作业进行计划。