この問題に関連する他の質問を投稿しましたが、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つずつインポートするある種のループを作成することです。ただし、私が見た例は、インポートに適用するのが難しいようです。