SQL ServerのBCP:どのようにすべてのフィールドの前後に引用符を入れるには?
-
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 "CHAR(34)を選択+ * + ATABLE queryout FROM CHAR(34)、 "C:" -T -N - C / T" \の一時\のout.csv \」\ ""
このは(最初と最後を含む)、各フィールドの前後に引用符を配置します。
私は、インポート手順が問題を持っていないように、あなたの目標は、一意の識別子を使用して明らかに別々のフィールド値だったと思います。
私は同じ問題を持っていたし、これは便利なworkaroudが見つかりました:非常にユニークであることができる例示の|
、あるいは文字列/#/
ため、異例のフィールド・ターミネータを使用して、文字列の内容と混乱べきではありません。また、六角値ができます(限られ、参照<のhref = "https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-2017" のrel = "nofollowをnoreferrerを「> 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
実際の実行可能な答えは、にある:
A)BCPとフォーマット・ファイルを生成する
bcp db.schema.tabel format nul -c -x -f file.xml -t"\",\"" -r"\"\r\n" -T -k
B)手動で最初のフィールドとして、上記フィールド0にフィールド1をコピーするために、そのファイルを編集し、MAX_LENGTH = 1を設定して、セパレータを除去し、QUOT一方が
FIELD1でした<FIELD ID="0" xsi:type="CharTerm" TERMINATOR="\"" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
トリック作品を、あなたはフィールド(ファイルへのインターフェース)は、常にヌル値になる最初sepratorを検出するが、行(クエリ出力するためのインタフェース)を追加しないように追加されます。