SQL-сервер BCP:Как поставить кавычки вокруг всех полей?

StackOverflow https://stackoverflow.com/questions/2061113

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть эта команда BCP:

'bcp DBName..vieter out c:\test003.txt -c -T /t"\",\"" -S SERVER'

В выходном CSV-файле имена полей заключаются не в кавычки, а в запятые!Как я могу получить /t"\",\"" чтобы поставить кавычки вокруг всех полей.

Спасибо всем

Это было полезно?

Решение

Установка признака конца строки в дополнение к признаку конца поля должна помочь.

'bcp DBName..vieter out c:\test003.txt -c -T -t"\",\"" -r"\"\n\"" -S SERVER'

Это, вероятно, сработает, но пропустите начальное "для первого поля первой строки и, возможно, последнего поля последней строки - я не уверен, просто догадываюсь, здесь нет сервера!

или попробуйте использовать QUOTENAME для переноса текстовых полей (вы также можете переносить числа, но обычно это не требуется).

'bcp "SELECT id, age, QUOTENAME(name,'"') FROM DBName..vieter" queryout c:\test003.txt -c -T -t"," -S SERVER'

Другие советы

Вам нужно использовать CHAR(34) для цитаты.На этой странице есть более подробная информация: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=153000

Вот список команд, которые я использовал.

BCP "DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from databaseName.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tableName'; select @colnames;" queryout "C:\HeadersOnly.csv" -r"\n\""  -c -T -Uusername -Ppassword -SserverName

bcp databaseName.schema.tableName out "C:\EmployeeDatawithoutheaders.csv" -T -t"\",\"" -r"\"\n\"" -c -Uusername -Ppassword -SserverName

copy /b C:\HeadersOnly.csv+C:\EmployeeDatawithoutheaders.csv C:\EmployeeData.csv

del C:\HeadersOnly.csv

del C:\EmployeeDatawithoutheaders.csv

bcp "SELECT char(34) + * +char(34) FROM table queryout "C: emp\out.csv" -T -N -c /t"\",\""

Это поставит кавычки до и после каждого поля (включая первое и последнее).

Я предполагаю, что ваша цель состояла в том, чтобы четко разделить значения полей с помощью уникального идентификатора, чтобы процедура импорта не вызывала проблем.

У меня была такая же проблема, и я нашел это решение полезным:Например, использование необычного терминатора поля. | или даже строка /#/ может быть очень уникальным и не должен влиять на содержимое строки.Вы также можете использовать HEX-значения (ограниченно, см. https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-2017)

экспорт

bcp DB.dbo.Table out /tmp/output2.csv -c -t "/#/" -U sa -P secret -S localhost

Импортировать

bcp TargetTable in /tmp/output2.csv -t "/#/" -k -U sa -P secret -S localhost -d DBNAME -c -b 50000 

Фактический работоспособный ответ, который удаляет ведущую кавычку, заключается в следующем:

А) создать файл формата с помощью bcp:

bcp db.schema.tabel format nul -c -x -f file.xml -t"\",\"" -r"\"\r\n" -T -k

Б) отредактируйте этот файл, чтобы вручную скопировать поле 1 в поле 0 выше, в качестве первого поля установите Max_Length=1 и удалите разделитель и одну кавычку, которая была в поле 1.

<FIELD ID="0" xsi:type="CharTerm" TERMINATOR="\&quot;" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>

Трюк работает, поскольку вы добавляете поле (интерфейс к файлу) для обнаружения первого разделителя, что приводит к всегда нулевому значению, но не добавляете строку (интерфейс для вывода запроса).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top