0


0

これが私のサンプルデータです。

1; a; b; c ;; 2; d; e; f ;; 3; g; h; i ;; 4; j; k; l;; 5; m; n; o ;; 6; p; q; r ;;

これが私のサンプルフォーマットファイル(BCP 9)です。

9.0 7 1 SQLCHAR 0 0 "" 0 x Latin1_General_CI_AS 2 SQLCHAR 0 0 ";" 2 i Latin1_General_CI_AS 3 SQLCHAR 0 0 ";" 3 s Latin1_General_CI_AS 4 SQLCHAR 0 0 ";" 4 t Latin1_General_CI_AS 5 SQLCHAR 0 0 ";" 5 u Latin1_General_CI_AS 6 SQLCHAR 0 0 ";" 6 v Latin1_General_CI_AS 7 SQLCHAR 0 0 "\ r \ n" 0 x Latin1_General_CI_AS

これがテーブル構造です。

テーブルbcpを作成します(id int identity、i int、s varchar(2)、t varchar(2)、v varchar(2)、v varchar(2)、dte datetime default getdate())。

問題は、 "\ r \ n"を使用した場合、1、4、6だけがすべて保存されるのではなく、 "\ 0"を使用しようとすると、最初のレコードのみが保存されることです。 どうやってこの問題を解決しますか?

もう1つの質問、セミコロンの後の空白スペースの行末記号は何ですか?

2 Answer


1


asiaenforcer、1週間オフラインになったことをお詫び申し上げます。

上記のあなたのデータを使用して私はそれを持っていると思う…​

まず、私はあなたの変換先テーブルに問題がありました - ステートメント「CREATE TABLE [dbo] .SansayRawInfo NOT NULL」は正しい構文ではありません。私が思い付いたテーブルは…

CREATE TABLE [dbo]。[SansayRawInfo]([RawDataId] [int] IDENTITY(1,1)NOT NULL、[シーケンス] [varchar](5)NULL、[バージョン] [varchar](5)NULL、[RecordType] [varchar](5)NULL、[ConnectionType] [varchar](5)NULL、[SessionID] [varchar](5)NULL、[ReleaseCause] [varchar](5)NULL、[StartTime] [varchar](5) NULL、[AnswerTime] [varchar](5)NULL、[ReleaseTOD] [varchar](5)NULL、[WestofGMT] [varchar](5)NULL、[RelCauseTxt] [varchar](5)NULL、[RelCauseBin] [ [5] NULL、[1リリース] [varchar](5)NULL、[OrgTrunkId] [varchar](5)NULL、[OrgProtocol] [varchar](5)NULL、[OrgSrcNo] [varchar](5)NULL 、[OrgSrcHost] [varchar](5)NULL、[OrgDestNo] [varchar](5)NULL、[OrgDestHost] [varchar](5)NULL、[OrgCallID] [varchar](5)NULL、[OrgRemPayIPAdd] [varchar] ](5)NULL、[OrgRemPayUDPAdd] [varchar](5)NULL、[OrgLocPayIPAdd] [varchar](5)NULL、[OrgLocPayUDPAdd] [varchar](5)NULL、[OrgCodecList] [varchar](5)NULL、[OrgIngrPck] [varchar](5)NULL、[OrgEgrPck] [varchar](5)NULL、[OrgIngrOct] [varchar](5)NULL、[OrgEgrOct] [varchar](5)NULL、[OrgIngrPckLoss] [varchar] (5)NULL、[OrgIngrDelay] [varchar](5)NULL、[OrgIngrPckJitter] [varchar](5)NULL、[TermTrunkId] [varchar](5)NULL、[TermProtocol] [varchar](5)NULL、[ TermSrcNo] [varchar](5)NULL、[TermSrcHost] [varchar](5)NULL、[TermDestNo] [varchar](5)NULL、[TermDestHost] [varchar](5)NULL、[TermCallID] [varchar]( 5)NULL、[TermRemPayIPAdd] [varchar](5)NULL、[TermRemPayUDPAdd] [varchar](5)NULL、[TermLocPayIPAdd] [varchar](5)NULL、[TermLocPayUDPAdd] [varchar](5)NULL、[TermCodecList] ] [varchar](5)NULL、[TermIngrPck] [varchar](5)NULL、[TermEgrPck] [varchar](5)NULL、[TermIngrOct] [varchar](5)NULL、[TermEgrOct] [varchar](5) )NULL、[TermIngrPckLoss] [varchar](5)NULL、[TermIngrDelay] [varchar](5)NULL、[TermIngrPckJitter] [varchar](5)NULL、[Fi] nRouteInd] [varchar](5)NULL、[RoutingDigits] [varchar](5)NULL、[CallDuration] [varchar](5)NULL、[PostDialDelay] [varchar](5)NULL、[RingTime] [varchar]( 5)NULL、[期間] [varchar](5)NULL、[ConfID] [varchar](5)NULL、[RPIDANI] [varchar](5)NULL、[ステータス] [bit] NULL CONSTRAINT [DF__SansayRaw__Statu__ 7C8480AE] DEFAULT( (0)))ON [一次]

ご注意ください

  • 上記のテーブル作成スクリプトでは、すべての変数の長さは5です(フォーマットファイルではなくサンプルデータに基づきます)。ただし、長さのすべてが大きいので違いはありません(テーブル作成スクリプトで指定されたものはありません)。

  • SQL_Latin1_General_CP1_CI_ASがデータベースのデフォルトであり、SSMSでテーブルをスクリプト化しただけなので、私のスクリプトには照合文はありません。 これも問題を起こさないはずです。

それで、私の次のステップはあなたが供給したサンプル生データに基づいてフォーマットファイルを通過することでした、そして私は次のフォーマットファイルを思い付きました…​

9.0 61 1 SQLINT 0 0 "" 0 RawDataId "" 2 SQLCHAR 0 20 ";" 2シーケンスSQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 30 ";" 3バージョンSQL_Latin1_General_CP1_CI_AS 4 SQLCHAR 0 44 ";" 4 RecordType SQL_Latin1_General_CP1_CI_AS 5 SQLCHAR 0 26 ";" 5接続タイプSQL_Latin1_General_CP1_CI_AS 6 SQLCHAR 0 42 ";" 6セッションID SQL_Latin1_General_CP1_CI_AS 7 SQLCHAR 0 14 ";" 7リリース停止SQL_Latin1_General_CP1_CI_AS 8 SQLCHAR 0 42 ";" 8 StartTime SQL_Latin1_General_CP1_CI_AS 9 SQLCHAR 0 42 ";" 9 AnswerTime SQL_Latin1_General_CP1_CI_AS 10 SQLCHAR 0 42 ";" 10リリースTOD SQL_Latin1_General_CP1_CI_AS 11 SQLCHAR 0 42 ";" 11 WestofGMT SQL_Latin1_General_CP1_CI_AS 12 SQLCHAR 0 42 ";" 12 RelCauseTxt SQL_Latin1_General_CP1_CI_AS 13 SQLCHAR 0 28 ";" 13 RelCauseBin SQL_Latin1_General_CP1_CI_AS 14 SQLCHAR 0 22 ";" 14第1リリースSQL_Latin1_General_CP1_CI_AS 15 SQLCHAR 0 64 ";" 15 OrgTrunkId SQL_Latin1_General_CP1_CI_AS 16 SQLCHAR 0 16 ";" 16 OrgProtocol SQL_Latin1_General_CP1_CI_AS 17 SQLCHAR 0 138 ";" 17 OrgSrcNo SQL_Latin1_General_CP1_CI_AS 18 SQLCHAR 0 138 ";" 18 OrgSrcHost SQL_Latin1_General_CP1_CI_AS 19 SQLCHAR 0 138 ";" 19 OrgDestNo SQL_Latin1_General_CP1_CI_AS 20 SQLCHAR 0 138 ";" 20 OrgDestHost SQL_Latin1_General_CP1_CI_AS 21 SQLCHAR 0 138 ";" 21 OrgCallID SQL_Latin1_General_CP1_CI_AS 22 SQLCHAR 0 26 ";" 22 OrgRemPayIPAdd SQL_Latin1_General_CP1_CI_AS 23 SQLCHAR 0 16 ";" 23 OrgRemPayUDPAdd SQL_Latin1_General_CP1_CI_AS 24 SQLCHAR 0 26 ";" 24 OrgLocPayIPAdd SQL_Latin1_General_CP1_CI_AS 25 SQLCHAR 0 16 ";" 25 OrgLocPayUDPAdd SQL_Latin1_General_CP1_CI_AS 26 SQLCHAR 0 138 ";" 26 OrgCodecList SQL_Latin1_General_CP1_CI_AS 27 SQLCHAR 0 20 ";" 27 OrgIngrPck SQL_Latin1_General_CP1_CI_AS 28 SQLCHAR 0 20 ";" 28 OrgEgrPck SQL_Latin1_General_CP1_CI_AS 29 SQLCHAR 0 20 ";" 29 OrgIngrOct SQL_Latin1_General_CP1_CI_AS 30 SQLCHAR 0 20 ";" 30 OrgEgrOct SQL_Latin1_General_CP1_CI_AS 31 SQLCHAR 0 20 ";" 31 OrgIngrPckLoss SQL_Latin1_General_CP1_CI_AS 32 SQLCHAR 0 20 ";" 32 OrgIngrDelay SQL_Latin1_General_CP1_CI_AS 33 SQLCHAR 0 20 ";" 33 OrgIngrPckJitter SQL_Latin1_General_CP1_CI_AS 34 SQLCHAR 0 64 ";" 34 TermTrunkId SQL_Latin1_General_CP1_CI_AS 35 SQLCHAR 0 16 ";" 35 TermProtocol SQL_Latin1_General_CP1_CI_AS 36 SQLCHAR 0 138 ";" 36 TermSrcNo SQL_Latin1_General_CP1_CI_AS 37 SQLCHAR 0 138 ";" 37 TermSrcHost SQL_Latin1_General_CP1_CI_AS 38 SQLCHAR 0 138 ";" 38 TermDestNo SQL_Latin1_General_CP1_CI_AS 39 SQLCHAR 0 138 ";" 39 TermDestHost SQL_Latin1_General_CP1_CI_AS 40 SQLCHAR 0 138 ";" 40 TermCallID SQL_Latin1_General_CP1_CI_AS 41 SQLCHAR 0 26 ";" 41 TermRemPayIPAdd SQL_Latin1_General_CP1_CI_AS 42 SQLCHAR 0 16 ";" 42 TermRemPayUDPAdd SQL_Latin1_General_CP1_CI_AS 43 SQLCHAR 0 26 ";" 43 TermLocPayIPAdd SQL_Latin1_General_CP1_CI_AS 44 SQLCHAR 0 16 ";" 44 TermLocPayUDPAdd SQL_Latin1_General_CP1_CI_AS 45 SQLCHAR 0 138 ";" 45 TermCodecList SQL_Latin1_General_CP1_CI_AS 46 SQLCHAR 0 20 ";" 46 TermIngrPck SQL_Latin1_General_CP1_CI_AS 47 SQLCHAR 0 20 ";" 47 TermEgrPck SQL_Latin1_General_CP1_CI_AS 48 SQLCHAR 0 20 ";" 48 TermIngrOct SQL_Latin1_General_CP1_CI_AS 49 SQLCHAR 0 20 ";" 49 TermEgrOct SQL_Latin1_General_CP1_CI_AS 50 SQLCHAR 0 20 ";" 50 TermIngrPckLoss SQL_Latin1_General_CP1_CI_AS 51 SQLCHAR 0 20 ";" 51 TermIngrDelay SQL_Latin1_General_CP1_CI_AS 52 SQLCHAR 0 20 ";" 52 TermIngrPckJitter SQL_Latin1_General_CP1_CI_AS 53 SQLCHAR 0 44 ";" 53 FinRouteInd SQL_Latin1_General_CP1_CI_AS 54 SQLCHAR 0 74 ";" 54ルーティング桁SQL_Latin1_General_CP1_CI_AS 55 SQLCHAR 0 16 ";" 55 CallDuration SQL_Latin1_General_CP1_CI_AS 56 SQLCHAR 0 16 ";" 56 PostDialDelay SQL_Latin1_General_CP1_CI_AS 57 SQLCHAR 0 16 ";" 57 RingTime SQL_Latin1_General_CP1_CI_AS 58 SQLCHAR 0 20 ";" 58期間SQL_Latin1_General_CP1_CI_AS 59 SQLCHAR 0 46 ";" 59 ConfID SQL_Latin1_General_CP1_CI_AS 60 SQLCHAR 0 74 ";" 60 RPIDANI SQL_Latin1_General_CP1_CI_AS 61 SQLCHAR 0 0 "" 0状況 ""

ここで重要なのは、最後の行の行区切り文字としての単一スペースだと思います* 61 SQLCHAR 0 0 "" 0状況 "" *

それから私は以下のステートメントを実行しました…​

'C:\ MYPATH \ data.txt'からのFORMATFILE = 'C:\ MYPATH \ fmt.fmt'からのdbo.SansayRawInfoの一括挿入

そして、最初の7行を正しくインポートしました。 最後の行はインポートされませんでした。私のデータファイルでは、他のすべての行にあるように、末尾のスペース行の終了記号がなかったためです。 この最後のスペースをデータファイルに追加すると、8行すべてが得られました。 ソースデータがシステムで生成されている場合は、末尾のスペースを表示します。そうでない場合は、ソースデータを再設定する必要があります。SQLServerでは、セット全体で一貫性がある必要があり、矛盾する行が見逃される可能性があります。

最終的に私の結果データは以下のようになりました…​

8 1 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a30 a31 a32 a33 a34 a35 a36 a37 a38 a39 a40 a49 a50 a51 a52 a53 a54 a55 a56 a57 NULL 0 9 2 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b18 b19 b20 b21 b22 b23 b24 b25 b27 b28 b29 b30 b33 b34 b35 b33 b34 b35 b36 b37 b37 b38 b39 b40 b41 b42 b43 b44 b45 b46 b47 b48 b49 b50 b51 b52 b53 b54 b55 b56 b57 NULL 0 10 3 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c45 c46 c47 c48 c49 c50 c51 c52 c54 c55 c56 c57 NULL 0 11 4 d1 d2 d3 d4 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d28 d27 d28 d29 d30 d31 d32 d33 d35 d36 d37 d38 d39 d39 d40 d42 d43 d45 d46 d47 d48 d48 d50 d52 d27 d28 d27 d28 d29 d28 d29 d28 d27 d28 d57 d56 d57 NULL 0 12 5 e1 e2 e3 e4 e5 e7 e8 e9 e10 e11 e12 e13 e14 e15 e18 e19 e20 e21 e22 e23 e24 e25 e26 e27 e30 e31 e32 e33 e34 e35 e37 e37 e43 e44 e45 e44 e45 e42 e42 e42 e42 e42 e42 e42 e44 e52 ec e14 ec e e e e e e e c e e e e e e e e e e e e e e e e e e e e4 e e4 e e4 e e4 e e4 e ec e e e e e e e e e e e x e e4 e e e e e e e x e e_ e e_ e e e e_ e_ e e e_ e e_ e_エッチE53 E54 E55 E56 E57 NULL 0 13 6 EF1 EF2 EF3 EF4 EF5 EF6 EF7 EF8 ef9 EF10のef11のEF12 ef13のef14 ef15のef16 ef17のef18 ef19のef20 ef21のef22 ef23のef24 EF25のef26 ef27のef28 ef29のef30 ef31のef32 ef33のef34 ef35のef36 ef37のef38 ef39のEF40のef41 NULL 0 14 7 g 1 g 2 g 3 g 4 g 5 g 6 g 7 g 8 g 9 g 10 g 11 g 12 g 13 g 14 g 15 g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g gいいg g g g g g g g g g g g g g g g g g g g g g g g g gg gg gg gg gg gg gg ggggggggggggggfgfgggggggggfgfgfgfgfggfgfgfgfgfggggfgfg2g22の違いg31 g32 g33 g35 g36 g37 g38 g39 g40 g41 g43 g44 g45 g46 g47 g48 g50 g51 g52 g53 g54 g55 g56 g57 NULL 0 15 8 h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 h 10 h 11 h 12 h 13 h 14 h 15 h 16 h 17 h 18 h h2 0 h21 h 22 h 23 h 24 h 25 h 26 h 27 h 28 h 29 h 30 h 31 h 33 h 34 h 35 h 36 h 37 h 38 h 39 h 40 h 41 h 42 h 43 h 44 h 45 h 46 h 47 h 48 h 49 h 50 h 51 h 52 h 53 h 54 h 55 h 56 h57 NULL 0

ご注意ください

私のRawDataIdは、テーブルが以前にクリアされて再作成されたため、8から始まります。

これがいくらか助けになることを願っています、そしてそれが正しい苦痛であるかもしれないのであなたがあなたのソースデータを再訪問する必要がないことを:)


0


OK、私はこれが私のために働くようにしました。 私は以下を使用しました…​

データファイル(あなたの例に基づく)…​

1; a; b; c ;; 2; d; e; f ;; 3; g; h; i ;; 4; j; k; l;; 5; m; n; o ;; 6; p; q; r ;;

各行はreturn charで終了しました - あなたの例のように連続した行ではありません

その後フォーマットファイルを使用して…​

9.0 7 1 SQLCHAR 0 0 "" 0 x "" 2 SQLCHAR 0 0 ";" 2 i Latin1_General_CI_AS 3 SQLCHAR 0 0 ";" 3 s Latin1_General_CI_AS 4 SQLCHAR 0 0 ";" 4 t Latin1_General_CI_AS 5 SQLCHAR 0 0 ";" 5 u Latin1_General_CI_AS 6 SQLCHAR 0 0 ";" 6 v Latin1_General_CI_AS 7 SQLCHAR 0 0 "" 0 x ""

そして結果セットを取得しました…​

1 1 abc NULL 20/01/2009 10:17:51 2 2 def NULL 20/01/2009 10:17:51 3 3 ghi NULL 20/01/2009 10:17:51 4 4 jkl NULL 20/01 / 2009 10:17:51 5 5 mno NULL 20/01/2009 10:17:51 6 6 pqr NULL 20/01/2009 10:17:51

ここで重要なのは、送信先テーブルのidentityフィールドとデフォルト値の列をスキップする方法にあると思います。 この hereには、優れたMSDNの記事があります。