2017-08-16 62 views
0

私はスプレッドシートを持っています。名前、住所、電話番号、電子メールなどの企業情報が含まれています。私がしたいのは、SQLへのフラットインポートを作成できるテーブルにすることです。私はMS SQLインポートウィザードを使用しています。私はBCPを使用していません。DTSインポートに失敗する

それは最後まですべての方法を取得し、私は、このエラーを与える:

Blockquote Operation stopped...

  • 初期化データフロータスク(成功)

  • 初期接続(成功)

  • SQLコマンドの設定(成功)

  • 設定元接続(成功)

  • 目的地設定接続(成功)

  • 検証(成功) メッセージ 警告0x80049304:データフロータスク1:警告:パフォーマンスと通信するためのグローバル共有メモリを開くことができませんでしたDLL;データフローのパフォーマンスカウンタは使用できません。解決するには、このパッケージを管理者またはシステムのコンソールで実行します。 (SQL Serverインポートおよびエクスポートウィザード)

  • 実行の準備(成功)

  • 事前実行(成功)

  • 実行(エラー) メッセージ エラー0xc020901c:データフロータスク1 :Source - crm_company $ .Outputs [Excel Source Output] .Columns [Directions] on Source - crm_company $ .Outputs [Excel Source Output]にエラーがありました。返される列のステータスは次のとおりです。 "テキストが切り捨てられました。または、1つ以上の文字がターゲットコードページに一致しませんでした。" (SQL Serverインポートおよびエクスポートウィザード)

エラー0xc020902a:データフロータスク1: "ソース - crm_company $ .Outputs [エクセルソース出力] .Columns [道順]" 切り捨てが発生したため失敗し、 "Source - crm_company $ .Outputs [Excel Source Output] .Columns [Directions]"の切り捨て行の配置は、切り捨て時の失敗を指定します。指定されたコンポーネントの指定されたオブジェクトで切り捨てエラーが発生しました。 (SQL Serverインポートおよびエクスポートウィザード)[DBO]へ

  • コピー[crm_company](停止) メッセージ エラー0xc0047038:データフロータスク1:SSISエラーコードDTS_E_PRIMEOUTPUTFAILED。 Source - crm_company $のPrimeOutputメソッドがエラーコード0xC020902Aを返しました。このコンポーネントは、パイプラインエンジンがPrimeOutput()を呼び出したときにエラーコードを返しました。障害コードの意味はコンポーネントによって定義されますが、エラーは致命的で、パイプラインは実行を停止します。この前にエラーメッセージが表示され、そのエラーの詳細が表示されることがあります。 (SQL Serverインポートおよびエクスポートウィザード)

  • ポスト実行(成功) メッセージ 情報0x4004300b:データフロータスク1: "宛先 - crm_companyは" 469行を書きました。 (SQL Serverインポートおよびエクスポートウィザード)

Blockquote

まず第一に、私は、任意の切り捨てエラーを無視するようにDTSを告げてきました。ソースフィールドは、intまたはnvarcharです。私は、マッピングを編集し、必要な列のために浮動小数点数の代わりにintを強制します。私は、デフォルトの列サイズを255から510に設定しました。DirectionsとNotesという2つの列に対して、Directionsはnvarcharで、Notesはnvarchar(最大)であると判断しました。 Directions 1をオーバーライドして、nvarchar(max)として扱われ、実行後にテーブル内に作成されることがわかります。しかし、それが実行されると、上記のエラーで毎回失敗します。

私はこのデータをテーブルに入れるだけです。それで全部です。私がテーブルを手動で指定してインポートすると、それでもエラーになります。ルートの最長テキストの長さは978文字なので、ほとんど巨大ではありません。私はそれが切り詰めるかどうか気にしない、私はちょうどそれが必要と感じるときにそれを停止したくない。インポートする1​​6000行があり、失敗する前にインポートされるのは470だけです。

奇妙なことに、DTSがスプレッドシート内のデータをその順番どおりに取り込んでいないため、ソースファイルでどのローが失敗したのかわかりません。 Go figure。私は20行のテキストデータを貼り付けることによって列フォーマットが何であるかを決める際にDTSの愚かなattemtpsを無効にしようとしましたが、それでも失敗します。

+0

いずれかの列の値の1つに列区切り文字が含まれている可能性はありますか?または行の区切り文字ですか? –

+0

これはCSVインポートではありません。 xlsxファイルなので区切り文字はありません。プレビューは正常で、すべてが正しい列に表示されます。グローバルに切り捨てを無視するように指示し、長さが1000文字以下のデータを含む列をnvarchar(max)フィールドにインポートする場合、問題はなく、切り捨ては発生しません。切り詰めるべきものが見つかった場合は、それを無視する必要があります。なぜなら、これは設定方法ですが、私の設定は無視されるからです。 – snert

答えて

0

提案:

は、Visual StudioのBIを持っている場合は、SSISパックを開発し、:

1.)これらのリダイレクトに失敗しました。ラインのためのブランチを追加してみてください。あなたは、Excelのソースから赤い線でルートを追加することでそれを行うことができます。パッケージを実行した後、成功した行と失敗した行を分析することができます。

2.)重要なことは、SQL Serverにどのような接続を使用するかです。ネイティブSQLクライアントには多くの問題がありますので、ADO.NETまたはOLE DB接続タイプを使用することをお勧めします。ウィザードで

3)は、型変換

4を使用してみてください)TXTにファイルを保存し、その後ETLを行います。

+0

私はSQL Server Management Studioを持っており、データベースを右クリックして、タスク - >データのインポートを選択します。これは1回のインポートですので、後で処理するためにステージングテーブルにデータを取得できます。私はVisual Studio BIを持っていません。インポートウィザードで作成した接続は、Excelソース接続と接続先のSQL Serverネイティブクライアント接続です。私はETLが何であるか分かりません。 – snert

+0

ETLは、抽出、変換、および読み込みを表します。アプリケーションはvariouos環境間のデータ転送をETLツールと呼び、コピー活動性さえも「ETLデータ」と言います。SQL ServerにはVisual Studio for Business Intelligenceが付属している必要があります(インストール資料が利用可能であれば後で追加できます)。これはデータ転送と処理のための非常に強力なツールです。データのインポートに問題があるときは、SQLサーバーのインポート/エクスポートデータアプリケーションを使用してパッケージを保存し、デバッグ/開発の目的で使用できる優れたアプローチだと思います。お役に立てれば。 –

0

これを回避するために多くのことを試してみましたが、スプレッドシートをAccessにインポートしてAccess to SQLにインポートする方が簡単でした。ジョブは5分で完了しました。

関連する問題