0

私はこれにつまずいていて、うまくいけば簡単で、間違って見ています。

フォーマットされたxlsファイルを受け取っています。データを処理し、SQLBulkCopyをテーブルに挿入するC#アプリを用意します。列には5つのペアがあり、1つはURLテキストの説明で、もう1つはURL自体です。これらのURLは、後で2番目の別のテーブルにプルするhtmlまたはpdfファイルを参照します。

無関係なフィールドを除いて、フィールドを含むテーブル[Base]があります。

[ID](identity)
[BaseID]
...他の関連フィールドの束、次に...
[LinkText1]
[LinkURL1]
[LinkText2]
[LinkURL2]
[LinkText3]
[LinkURL3]
[LinkText4]
[LinkURL4]
[LinkText5]
[LinkURL5]

URL /ファイルのストレージは、次のフィールドを持つテーブル[ドキュメント]にあります。

[BaseIdentityID]-[Base]テーブル
[DocIndex]のIDフィールドを参照します-各Baseレコードには1〜5個のURLを入力できます。これは、それがどのURLであるかを知るためのものです。
[MimeType]
[Url]
[Text]
[Content]
[Processed]-ビット-後でURLデータをプルします。これは、そのフラグを立てます。

[Base]テーブルでINSTEADOFトリガーを使用しています。これらのレコードは更新できるため、アーカイブされたデータをテーブルに保持します。トリガーは、挿入しているものを確認し、既存のバージョンに古いフラグを付け、この新しいベースレコードをCurrentVersionとして挿入します。

このトリガーでは、5組のURLデータのそれぞれに基づいて、[Documents]テーブルに新しい行を挿入し、Documentsテーブルの[BaseIdentityID]の[Base]IDIDフィールドに渡します。 LinkURL1の[DocIndex]には1、LinkURL2の[DocIndex]には2など。

私がそれを正確に行う方法を視覚化するのに苦労しています。助言がありますか?挿入するベースレコードのかなり大きなコレクションがある可能性があるため、カーソルの使用を避けようとしています。

ありがとう。

4

1 に答える 1

0

たぶん、この種のクエリをAFTERINSERTトリガーで記述できます。

INSERT INTO [InternationalDR].[dbo].[Documents] ([BaseIdentityID], [DocIndex], [Url], [Text])
SELECT INSERTED.[ID], 1, INSERTED.[LinkURL1], INSERTED.[LinkText1] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 2, INSERTED.[LinkURL2], INSERTED.[LinkText2] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 3, INSERTED.[LinkURL3], INSERTED.[LinkText3] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 4, INSERTED.[LinkURL4], INSERTED.[LinkText4] FROM INSERTED
UNION ALL SELECT INSERTED.[ID], 5, INSERTED.[LinkURL5], INSERTED.[LinkText5] FROM INSERTED;
于 2012-12-13T19:21:17.787 に答える