Сгенерированный KML файл из SQL-запроса сохраняется на локальном диске
Мой 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 файл на локальный диск. Пожалуйста, советую.
Ответы
Ответ 1
Не самый элегантный способ, но для этого можно использовать bulk copy program
и xp_cmdshell
. Во-первых, xp_cmdshell
заблокирован по умолчанию SQL Server как часть конфигурации безопасности, поэтому вам нужно будет включить это в первую очередь, а 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'
Просто добавьте в него свой запрос и убедитесь, что вы добавили []
вокруг имен вашей таблицы.
Документы Microsoft для xp_cmdshell здесь и bcp можно найти здесь
Ответ 2
Использование bcp
является определенным выбором, особенно при работе с большими наборами данных. В качестве альтернативы вы можете попробовать использовать SQL Management Studio
- Export Data
.
- Откройте интерфейс -
Right Click
по имени базы данных, затем Tasks
, затем Export Data
-
Меню открыто. Нажмите Next
![введите описание изображения здесь]()
-
Затем выберите SQL Server Native Client
, sql-сервер, имя базы данных и метод проверки подлинности:
![введите описание изображения здесь]()
-
Затем, где сохранить данные:
![введите описание изображения здесь]()
-
Затем, как мы получаем данные (в вашем случае SQL-запрос):
![введите описание изображения здесь]()
-
Прошел запрос:
![введите описание изображения здесь]()
-
Затем у нас есть некоторые настройки, нажмите finish
.
![введите описание изображения здесь]()
Ответ 3
Чтобы сохранить результаты удаленного запроса в локальном файле, вы можете использовать Powershell script, как в этом примере:
$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();
script можно выполнить из командной строки, сохранив script в файл с расширением ".ps1" и используя следующую команду:
powershell -ExecutionPolicy RemoteSigned -File "C:\PowershellScripts\ExampleExport.ps1"
Эта команда может быть запланирована с помощью задачи диспетчера задач Windows для автоматизации экспорта. В качестве альтернативы, расписание с использованием задания агента SQL Server с шагом Powershell или CmdExec.