Экспорт данных CSV с помощью SQLCMD.EXE

Я пытаюсь экспортировать данные из SQL Server в формат CSV. Для этого у меня есть задача летучей мыши, которая выполняется через определенные промежутки времени. Команда:

SQLCMD.EXE -d [db details] -i c:\export.sql -o c:\export.csv -s"," -W 

Файл SQL - это просто SELECT * из представления.

Это работает, за исключением того, что некоторые строки содержат запятые в данных, поэтому значения необходимо заключать в кавычки. Я мог бы изменить разделитель столбцов на «','», но тогда мне понадобится SQL Server, чтобы также избегать одинарных кавычек в данных.

К сожалению, замена разделителя на другой символ вряд ли решит проблему в 100% случаев, поскольку одно из полей содержит сериализованные данные из другого приложения, которые содержат всевозможные странные и чудесные символы.

Могу ли я получить стандартные цитируемые данные CSV?


person Tim Fountain    schedule 08.10.2010    source источник


Ответы (1)


У вас должна быть возможность изменить оператор SELECT для использования функции QUOTENAME. Вам, конечно, придется перечислить все столбцы по отдельности, а не использовать SELECT *.

Примечание. Может быть трудно читать на экране, но второй параметр для QUOTENAME:

{одинарная кавычка} {двойная кавычка} {одинарная кавычка}

SELECT QUOTENAME(Column1, '"'), QUOTENAME(Column2, '"')
    FROM YourView
person Joe Stefanelli    schedule 08.10.2010
comment
Как сделать вывод NULL в? - person PerlDev; 15.11.2010
comment
В пакетном файле работает как шарм (с включенной функцией отложенного раскрытия и двойными кавычками, чтобы избежать символа): SELECT QUOTENAME (FieldName, ''), .... - person djangofan; 15.11.2011
comment
Чтобы преобразовать NULL с помощью переносимого SQL, используйте COALESCE (field1, ''). COALESCE может принимать несколько, возможно, нулевых параметров, он вернет первый, который не является нулевым. - person Jimbo; 03.04.2013
comment
Помните, что QUOTENAME ограничен 128 символами. Ввод более 128 символов возвращает NULL, что делает его бесполезным для более длинного текста. - person JustinStolle; 25.05.2013
comment
Любое решение для QUOTENAME для столбцов, содержащих более 128 символов? - person PC.; 20.09.2016
comment
Это помогло мне, так как все мои поля содержат всего 100 символов. Но меня также интересует способ сделать это с полями длиной более 128 символов ... может быть, объединить несколько небольших подстрок, все с использованием QuoteName, в одну длинную строку? В любом случае, я благодарен за этот ответ, потому что он мне очень помог, но @djangofan указал, что в строке CMD / SQLCMD мне пришлось использовать две двойные кавычки для механизма выхода. - person PBJ; 21.03.2019