1

テーブル/ビューからパーティション ビューにデータを挿入するために、OLE DB コマンドまたは oledb 宛先 (データ アクセス モード - sql コマンド) でクエリを記述する方法。

4

1 に答える 1

6

分割ビューは、この質問の前に私が経験したことがなかったものです。リンクされた記事で提供されている定義を使用して、このスキーマとサンプルの挿入を思いつき、自分がやっていることがわかっていることを確認しました。

トランザクションをロールバックしたため、dbo.Year1998Salesビューにデータがありませんでした。次に、新しい SSIS パッケージを作成しました。SQL Server 2012 に SSIS を使用したという事実は、結果には関係なく、構成は同じです。

新しいパッケージを作成し、データ フローを追加し、OLE DB 接続マネージャーを追加し、データ フロー内に OLE DB ソースを OLE DB 宛先に接続しました。

ここに画像の説明を入力

私のソースでは、SQLFiddle デモと同じクエリを使用しました

SELECT 
    D.number AS OrderId
,   D.number * 100 AS CustomerID
,   DATEADD(D, d.number % 365, '1998-01-01') AS OrderDate
,   1+ (D.number % 12) AS OrderMonth
,   DATEADD(mm, (D.number % 12), '1998-01-01') AS DeliveryDate
FROM
(
    SELECT
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 AS some_number  
    FROM
        master.dbo.spt_values AS SV  
) D (number)
ORDER BY D.number ASC;

dbo.Year1998Salesは宛先とビオラとして選択しました、それは動作します。実際、いいえ、それは私の驚きではありませんでした。SSMS 内で機能したものは、データ フローでエラーになります。

[OLE DB Destination 2 ] エラー: SSIS エラー コード DTS_E_OLEDBERROR。OLE DB エラーが発生しました。エラー コード: 0x80004005。OLE DB レコードが利用可能です。ソース: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 説明: "パーティション ビュー 'FOO.dbo.Year1998Sales' は、一括操作のターゲットとして更新できません。".

解像度

このエラー メッセージのわかりやすい部分は、「一括操作の対象」です。Table or view - fast loadまたはのデータ アクセス モードではTable name or view name variable - fast load、テーブルへの一括挿入が行われます。一般的に言えば、これは必要なことです。ただし、この場合、それは不可能であるため、宛先Table or viewまたはTable name or view name variable.

それは機能し、小さなデータセットの場合、それが私のアプローチになります。

代替案 1

ビューの論理構造を完全にバイパスし、条件付き分割を使用してロジックを再作成し、N 個のテーブルに書き込みます。これにより、テーブルに対して一括更新を使用できるようになります。ただし、そのビジネス ロジックをパッケージにレプリケートし、2 つの同期を維持するためにパッケージをさらにメンテナンスするには、少なからぬコストがかかります。基になるビューでロジックが変更され、それらの変更がパッケージに反映されないか、正しく移植されない場合は、天国が役立ちます。絶対的なビジネス上の理由がない限り、私はこの道をたどりません。

代替案 2

データをステージングします。分割ビューに書き込む代わりに、すべてのデータをデータ フローのステージング テーブルに書き込みます。データ フローの直後に、ステージング テーブルからビューにデータをプッシュする SQL 実行タスクを用意します。

確かなことはわかりませんが、これは代替案 1 または元の解像度よりも優れたパフォーマンスを発揮すると想定していますが、テストは行っていません。また、私が働いている場所など、いくつかの場所では、新しいテーブルを作成することがかなり物議を醸す可能性があることを知っているため、これを主要な解決策としてリストしません。

于 2013-01-25T20:58:49.603 に答える