Вывод текстового квалификатора BCP в двойных кавычках

У меня есть команда bcp, которая помещает результаты запроса в плоский файл, который представляет собой юникод с разделителями-запятыми. Мне нужно, чтобы поля были заключены в двойные кавычки с текстовым идентификатором в двойных кавычках.

Вот пример вывода csv:

36029,2,Oct 11 2004  1:01AM,4,23537,0.10

Где это должно быть:

"36029","2","Oct 11 2004  1:01AM","4","23537","0.10"

Я подозреваю, что он использует флаг -q, но я не уверен, как на самом деле использовать -q. Документация MS не очень помогает мне.

Извините, если это обман, я тщательно искал, клянусь!


person Razzle Dazzle    schedule 08.08.2012    source источник
comment
Уже слишком поздно, но у меня сейчас такая же проблема, и я не получаю решения, потому что я узнаю, и, пожалуйста, дайте мне знать.   -  person Mahantesh    schedule 15.05.2018


Ответы (5)


попробуй это:

Exec Master..xp_Cmdshell 'bcp "SELECT '"' + col1 + '"', '"' + col2+ '"', '"' + col3+ '"'
FROM table1" queryout  "C:\mcg1.csv" -c -t,"'
person AnandPhadke    schedule 08.08.2012
comment
Arrrghh, я надеялся избежать такого уродливого взлома кода. Поскольку мне придется вручную вставлять имена столбцов в запрос как есть (потому что нам нужны заголовки столбцов в выходном файле, а bcp этого тоже не делает) - person Razzle Dazzle; 08.08.2012
comment
все имена столбцов в указанном выше формате вы можете заполнить динамически из sys.columns. Я думаю, это способ сделать это в bcp. - person AnandPhadke; 08.08.2012
comment
Используйте функцию quoteName! - person Nate S.; 12.02.2015

Если вы извлекаете из Eclipse, текст и даты заключаются в двойные кавычки. Я делаю это из представления Data Source Explorer. Щелкните правой кнопкой мыши -> Данные -> Извлечь...

person ken jarrad    schedule 10.11.2012
comment
Я уверен, что ОП хочет автоматизировать этот процесс и конкретно заявляет, что использует SQL Server 2008. - person Nate S.; 12.02.2015

Вы также можете использовать функцию SQL-сервера QuoteName, чтобы указать столбец, который должен иметь кавычки. Это также дает возможность добавлять любой символ вместо кавычек.

Exec Master..xp_Cmdshell 'bcp "SELECT QuoteName(col1,Char(34)),QuoteName(col2,Char(34)),... FROM table1" queryout  "C:\test.csv" -c -t,"'

Посмотрите здесь, чтобы узнать больше

Эксперты по утилите SQL Server BCP Руководство

person Nate S.    schedule 12.02.2015

использовать:

select col1, col2, quotename(col3, '\"') from table1    -- backslash before double quote to escape the "
person tbone    schedule 23.04.2013

person    schedule
comment
Это много кода, и нет объяснения того, как это отвечает на вопрос. - person Andrew Barber; 25.09.2012