SQL Serverの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 "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="\&quot;" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>

トリック作品を、あなたはフィールド(ファイルへのインターフェース)は、常にヌル値になる最初sepratorを検出するが、行(クエリ出力するためのインタフェース)を追加しないように追加されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top