Как автоматически экспортировать таблицу SQL в файл CSV в запросе? - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу экспортировать таблицу SQL в файл CSV автоматически в запросе.Я уже выполнил экспорт таблицы SQL в .CSV, но на выходе был файл, разделенный табуляцией, без заголовков столбцов.Как сделать вывод запятой разделенной и с заголовками столбцов?

См. Ниже запрос, который работает, но без разделителя запятых и заголовков столбцов.


DECLARE @cmd NVARCHAR(4000)
DECLARE @pathAndFileName NVARCHAR(MAX)
DECLARE @result INT
SET @pathAndFileName = 'C:\test.csv'
SET @cmd = 'bcp " SELECT * from  testdb.dbo.test_table " queryout "'
  + @pathAndFileName + '" -w -T -t -S Servername\SQLExpress; '       
EXEC @result = xp_cmdshell @cmd 
SELECT @result

1 Ответ

2 голосов
/ 29 апреля 2019

Вам необходимо указать терминатор поля при использовании -t (который по умолчанию является вкладкой (\t). Поскольку вы не указали его, используется значение по умолчанию:

SET @cmd = 'bcp " SELECT * from  testdb.dbo.test_table " queryout "'
         + @pathAndFileName + '" -w -T -t "," -S Servername\SQLExpress; ';

Обратите внимание, однако, я настоятельно рекомендую не объединять необработанное значение @pathAndFileName, особенно когда это nvarchar(MAX). То, что у вас есть, может быть легко введено.

Если @pathAndFileName всегда будет иметьзначение меньше или равно 128 символам, тогда я бы объявил @pathAndFileName как sysname, а затем использовал бы ...+ QUOTENAME(@pathAndFileName,'"') + .... Если это может быть больше 128 символов, тогда вам нужно будет заключить его в кавычки самостоятельно:

... + REPLACE(@pathAndFileName,'"','""') + ...
...