-1

SQL Server データベースからエクスポートしようとしているテーブルがあります。列の 1 つに苦労しており、インポートおよびエクスポート ウィザードがあらゆる種類のエラーをスローしています。この列を削除するとすぐに、エクスポートは問題なく実行されます。

データベースの列は、完全な HTML ドキュメントをテキスト データ型として格納しています。HTML を使用せずに、DIV タグ間のこの列から各フィールドのテキストのみをエクスポートしたいと考えています。

例えば:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <STYLE type=text/css> P, UL, OL, DL, DIR, MENU, PRE { margin: 0 auto;}</STYLE>
    <META content="MSHTML 6.00.2900.3429" name=GENERATOR>
</HEAD>
<BODY leftMargin=1 topMargin=1 rightMargin=1>
    <FONT face=Tahoma size=2>
        <DIV>[REDACTED TEXT THAT I WANT TO EXPORT]</DIV>
    </FONT>
</BODY>
</HTML>

それはレコードの 1 つからコピペされたものです。レコード内のすべての行に同じ HTML がありますが、編集されたテキストをエクスポートしたいだけです。

このデータベース/アプリケーションを設計した人がバカだったことはさておき、どうやってそのデータを取得できますか? エクスポート ウィザードを機能させることができれば、HTML を使用して完全なレコードを取得することもできます。

編集:インポートおよびエクスポートウィザードのレポートエラーは次のとおりです。

操作が停止しました...
- データ フロー タスクの初期化 (成功)
- 接続の初期化 (成功)
- SQL コマンドの設定 (成功)
- ソース接続の設定 (成功)
- 宛先接続の設定 (成功)
- 検証中 (成功)
- 実行の準備 (成功)
- 実行前 (成功)
- 実行中 (警告)
メッセージ
* 警告: 準備 SQL タスク 1: 複数ステップの OLE DB 操作でエラーが発生しました。利用可能な場合は、各 OLE DB ステータス値を確認します。作業は行われませんでした。(SQL Server インポートおよびエクスポート ウィザード)
* 警告: 準備 SQL タスク 1: 複数ステップの OLE DB 操作でエラーが発生しました。利用可能な場合は、各 OLE DB ステータス値を確認します。作業は行われませんでした。(SQL Server インポートおよびエクスポート ウィザード)

  • Query(エラー)
    メッセージ へのコピー
  • エラー 0xc0202009: データ フロー タスク 1: SSIS エラー コード DTS_E_OLEDBERROR。OLE DB エラーが発生しました。エラー コード: 0x00040EDA。

  • エラー 0xc0209029: データ フロー タスク 1: SSIS エラー コード DTS_E_INDUCEDTRANSFORMFAILUREONERROR。エラー コード 0xC020907B が発生したため、「input "Destination Input" (45)」が失敗し、「input "Destination Input" (45)」のエラー行の処理がエラー時の失敗を示しています。指定されたコンポーネントの指定されたオブジェクトでエラーが発生しました。これより前に、失敗に関する詳細情報を含むエラー メッセージが投稿される場合があります。

  • エラー 0xc0047022: データ フロー タスク 1: SSIS エラー コード DTS_E_PROCESSINPUTFAILED. 入力「Destination Input」(45) の処理中に、コンポーネント「Destination - Query」(34) の ProcessInput メソッドがエラー コード 0xC0209029 で失敗しました。識別されたコンポーネントが ProcessInput メソッドからエラーを返しました。エラーはコンポーネントに固有のものですが、エラーは致命的であり、データ フロー タスクの実行が停止します。これより前に、失敗に関する詳細情報を含むエラー メッセージが投稿される場合があります。

  • エラー 0xc02020c4: データ フロー タスク 1: データ フロー タスク バッファーに行を追加しようとして、エラー コード 0xC0047020 で失敗しました。

  • エラー 0xc0047038: データ フロー タスク 1: SSIS エラー コード DTS_E_PRIMEOUTPUTFAILED. コンポーネント「ソース」の PrimeOutput メソッド

  • Query" (1) はエラー コード 0xC02020C4 を返しました。パイプライン エンジンが PrimeOutput() を呼び出したときに、コンポーネントは失敗コードを返しました。失敗コードの意味はコンポーネントによって定義されていますが、エラーは致命的であり、パイプラインは実行を停止しました。これより前に投稿されたエラー メッセージで、失敗に関する詳細情報が記載されています。

  • 実行後 (成功)
    メッセージ

  • 情報 0x4004300b: データ フロー タスク 1: "コンポーネント "送信先 - クエリ" (34)" は 7465 行を書き込みました。
4

1 に答える 1

0

そのフィールドのselectステートメントで、SUBSTRINGとCHARINDEXを使用して必要な部分のみを抽出し、タグ間の部分を切り取ります。ただし、フィールドごとにそのようなタグが1つしかない場合に限ります。以下では、[HTML]は実際にはフィールドをVARCHARにキャストしているため、[HTML]が表示されている場所に次のように配置します。

CAST([YourHTMLFieldName] AS VARCHAR(MAX))

そして、これは本質的に「との間のテキストを私に与えてください:

SELECT SUBSTRING([HTML], CHARINDEX('<DIV>', [HTML]), CHARINDEX([HTML], '</DIV>') - CHARINDEX([HTML], '<DIV>'))

出力に誤って「」タグが含まれている場合は、「CHARINDEX('')+ 5」に変更できるように、少し試してみる必要があります。

于 2012-04-19T20:04:54.070 に答える