Сгенерированный 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.