ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3700882 エクスポート時の改行コードについて
質問者:azuaz_001 SQLServe2000にて、bcpコマンドでテーブルのエクスポート(csv形式)を行いたいと考えています。しかし出力元テーブルの一部フィールドで改行が入ったデータがあり、出力時に行の体裁が崩れてしまいます。bcpコマンドにて出力時に上記の問題を回避する方法を探しています。(やりたいことはSQLServe上から定期的にCSVデータを出力するのが目的です。)どうかよろしくおねがいします。
困り度:
  • 困っています
質問投稿日時:
08/01/21 20:08
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.2 SQL Server2000のデータをbcpでCSVにエクスポート→そのCSVをOracleのSQL*Loaderで、インポートするということですね。

SQLChar型?って定義はありましたか?
ちょっと良く分からないのですが、SQL Serverで格納している
データがSJISかUNICODEかにもよりますが、感覚的には
こんな感じでできませんか?

-- テーブル名の頭は、必ず「#」をつける。するとtempdbに
-- このテーブルがSQL Server上で作成されます。
-- エクスポートするイメージのワークテーブルを作成する
CREATE TABLE #WORK_TABLE
(
field1 varchar(max), field2 varchar(max), field3 varchar(max)........
)

go

-- ワークテーブルに改行文字をReplace
INSERT INTO #WORK_TABLE
SELECT
field1,
field2,
field3,
REPLACE(CAST(問題の改行含む項目 as varchar(max)), '0x0D0A', ' ') AS field4,
....... 以後項目分続く
FROM
 [db名].[bcpでエクスポートしようとしていたテーブル]

go

-- BCP実行。細かい引数などのオプションは用途で合わせてください。
-- (特に接続方法や接続文字列)
DECLARE @filePath nvarchar(max)
DECLARE @bcpCmd varchar(max)

SET @filePath = 'c:\aaa.txt'
SET @bcpCmd = 'bcp "SELECT * FROM #WORK_TABLE" queryout "'
SET @bcpCmd = @bcpCmd + @filePath + '" -U username -P pw -password'

EXEC master..xp_cmdshell @bcpCmd

これをSQL Server上でクエリとして実行します。
(Enterprise Managerか、クエリアナライザでしたっけ?で
 細かいところを調整して、実行すれば、恐らくいけるかと
 思います)

お試しください。
回答者:kero_mio
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/01/22 20:21
この回答へのお礼ご回答ありがとうございます。思考錯誤しながらなんとか意図する作業ができました。どうもありがとうございました。

回答

ANo.1 CSVファイルに定義された改行付きイメージのまま
テーブルにインポートしたいということで、よろしいでしょうか?
(言い方を変えると、改行をReplaceしたり、消去したりしたくないということで、宜しいでしょうか?)

また、インポート先のテーブルにある、体裁が崩れてしまう
フィールドの型は何を使ってますか?
(ntext, nvarchar, text, varchar など)

もう少し細かい情報を補足頂けると回答しやすいので、
情報UPの程、よろしくお願いします。
回答者:kero_mio
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:
08/01/22 01:16
この回答への補足ご連絡ありがとうございます。
CSVファイルへのエクスポート時に改行を削除(もしくはReplace)した形
で出力したいのです。
フィールドの形はSQLChar型ですがSYBChar型にfmtファイルは変更しております。
※最終的にやりたいことは出力したCSVファイルをOracleDBへSQLローダーにてインポートするのが目的です。
どうかよろしくおねがいします。
この回答へのお礼この回答にお礼をつける(質問者のみ)