Как заполнить CSV-файл из хранимой процедуры SQL Server? - PullRequest
0 голосов
/ 17 января 2019

Как заполнить файл .csv из хранимой процедуры SQL Server?

У нас нет Office на сервере. Файл .CSV должен быть заполнен из набора результатов хранимой процедуры.

Как экспортировать в .CSV без использования пакета служб SSIS?

Конечный результат, мне нужно будет сгенерировать оповещение по электронной почте, прикрепив этот CSV-файл в качестве отчета.

Мне нужно будет использовать программу массового копирования (BCP), я ищу образцы BCP для генерации CSV-файла

Ответы [ 4 ]

0 голосов
/ 17 января 2019

Я бы использовал BCP

см. Пример

declare @sql varchar(2000)
select @sql = 'bcp "SQL QUERY HERE" queryout '+@fileLocation+@fileName+'.csv -c -t, -T -S' + @@servername
    exec master..xp_cmdshell @sql, NO_OUTPUT    

если вам нужно увидеть какие-либо ошибки или что они делают, просто удалите ", NO_OUTPUT"

0 голосов
/ 17 января 2019

Посмотрите на код ниже. Хранимая процедура создается и затем используется в качестве источника в команде BCP. Затем создается текстовый файл. Разделители обсуждаются в примере кода в ссылке.

Пример кода взят из Создание файлов CSV с использованием BCP и хранимых процедур

use tempdb
go
create proc s_bcpMasterSysobjects
as
   select   '"' + name + '"'
            + ',' + '"' + convert(varchar(8), crdate, 112) + '"'
            + ',' + '"' + convert(varchar(8), crdate, 108) + '"'
   from master..sysobjects
   order by crdate desc
go
declare @sql varchar(8000)
select @sql = 'bcp "exec tempdb..s_bcpMasterSysobjects"
       queryout c:\bcp\sysobjects.txt -c -t, -T -S'
+ @@servername
exec master..xp_cmdshell @sql
0 голосов
/ 17 января 2019

Для этого есть два метода:

(1) Использование OPENROWSET

Попробуйте реализовать похожую логику:

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
EXEC Sp_TEST

(2) Использование bcp

С третьей ссылки в разделе «Ссылки»:

Метод queryout позволяет вам BCP из результата хранимой процедуры, которая открывает много возможностей и предлагает большой контроль над форматом файла. Для всего, кроме простого извлечения таблицы, я бы предпочел использовать этот метод, а не представление. Я также отформатировал бы каждую строку в хранимой процедуре. Это означает, что форматирование можно проверить независимо от создания файла

declare @sql varchar(8000)
select @sql = 'bcp "exec sp_Test"
   queryout c:\bcp\sysobjects.csv -c -t, -T -S'
+ @@servername
exec master..xp_cmdshell @sql

Ссылки

  1. Как экспортировать данные в файл .csv с помощью хранимой процедуры на сервере Sql.
  2. Как создать выходной файл CSV из хранимой процедуры в SQL Server
  3. Создание файлов CSV с использованием BCP и хранимых процедур
  4. Экспорт файла CSV с помощью хранимой процедуры
  5. Запись результатов выбора в CSV-файл
0 голосов
/ 17 января 2019

Создайте небольшой скрипт, CSV представляет собой простой формат: CSV = отдельное значение запятой. Разделяйте значения шириной запятой.

...