1

この問題に関連する他の質問を投稿しましたが、XLS からの複数の行データのインポートの問題に直接対処するための回答はありませんでした。私は一般的に SQL や DB の使用頻度が低いため、これらのクエリの作成に関する背景や経験は限られています。私の目標を達成するためのより簡単で直接的なアプローチがあれば、私はそれらにオープンです. 過剰投稿などの意図はありませんが、このサイトが最も役に立ちそうです (私の他の投稿に返信してくれた皆さんに感謝します)。

私が見たいくつかの投稿から、作業セットベースのクエリ/トリガーがあることを理解しています (複数の行がインポートされるため)。最終的には、データを親テーブルにインポートするだけでよく、子テーブルには静的な値や親テーブルの値を入力できますが、PK/FK 関係は維持する必要があります。これは、XLS から複数行のデータをインポートするときに最も問題になると思われることです。

親テーブルで挿入が実行されたときに子テーブルに値を挿入するトリガーを設定しました。クエリは正しく実行されますが、複数のデータ行が挿入されたときに FK を PK と一致させることができません。FK には常に、親テーブルに挿入された最後の行の ID があります。他のフォーラムの投稿 (ここおよび他のサイト) からいくつかのアプローチを試しましたが、常にエラーが発生します。

これが私の updatePgVer トリガー コードです。

ALTER TRIGGER [updatePgVer]
   ON  [prototype].[dbo].[PageVersion]
FOR INSERT AS 
   BEGIN
    SET NOCOUNT ON;

-- Insert into PageHistory
INSERT 
INTO [prototype].[dbo].[PageHistory] ([VersionID], [Date], [Action], [Who], [StateId], [Owner])
SELECT 
    @@IDENTITY
    , GETDATE()
    , 'created'
    , 'xls_user'
    , [StateID]
    , 'xls_user'
FROM inserted

END

そして、親テーブルに挿入するために使用されるクエリ:

INSERT INTO [prototype].[dbo].[PageVersion] ([Number], [PageId], [Properties], [StateId], [Language], [SearchText], [PageMetaDescription], [PageMetaKeyWords], [PageTypeId], [Name], [Title], [Owner], [Admin], [ShowInMenu])
SELECT [Number], [PageId], [Properties], [StateId], [Language], [SearchText], [PageMetaDescription], [PageMetaKeyWords], [PageTypeId], [Name], [Title], [Owner], [Admin], [ShowInMenu]
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\test_import.xls', 'SELECT * FROM [Query$]');

私が持っている他の唯一のアイデアは、@@IDENTITYが常に一致するように、各行を通過して一度に1つずつインポートするある種のループを作成することです。ただし、私が見た例は、インポートに適用するのが難しいようです。

4

1 に答える 1

0

IDENTITY を持つ列のように見える列 VersionID の値は、挿入されたテーブルにあります。このようにトリガーで参照できます

INSERT 
INTO [prototype].[dbo].[PageHistory] ([VersionID], [Date], [Action], [Who], [StateId], [Owner])
SELECT 
    [VersionID],
    , GETDATE()
    , 'created'
    , 'xls_user'
    , [StateID]
    , 'xls_user'
FROM inserted

INSERT 中に挿入されたデータから利用できるデータを確認したい場合は、これを一時的にトリガーに入れます。

SELECT *
FROM inserted
于 2011-07-25T22:43:13.767 に答える