次のことをしようとしていますが、「列名 {column} が無効です」というエラーが表示されます。誰かが私のやり方の誤りを見るのを手伝ってくれませんか? 最近、トランザクション テーブルを 2 つのテーブルに分割しました。1 つは頻繁に更新されるレポートの列名を含み、もう 1 つは変更されていないトランザクションを含みます。これにより、1 つのテーブルへの単純な挿入を、一意の列を持つ 2 つのテーブルへの複雑な挿入に変更しようとしています。私はそれを次のようにしようとしました:
INSERT INTO dbo.ReportColumns
(
FullName
,Type
,Classification
)
OUTPUT INSERTED.Date, INSERTED.Amount, INSERTED.Id INTO dbo.Transactions
SELECT
[Date]
,Amount
,FullName
,Type
,Classification
FROM {multiple tables}
「INSERTED.Date、INSERTED.Amount」は、「INSERTED」の有無にかかわらず、エラーの原因です。前に。
- - - - - - - - -アップデート - - - - - - - - -
Aaron は正しかったし、挿入で管理することは不可能でしたが、私は挿入の機能を大幅に改善し、マージ機能を使用して他のビジネス ルールを追加することができました。私の最終的な解決策は次のようになります。
DECLARE @TransactionsTemp TABLE
(
[Date] DATE NOT NULL,
Amount MONEY NOT NULL,
ReportColumnsId INT NOT NULL
)
MERGE INTO dbo.ReportColumns AS Trgt
USING ( SELECT
{FK}
,[Date]
,Amount
,FullName
,Type
,Classification
FROM {multiple tables}) AS Src
ON Src.{FK} = Trgt.{FK}
WHEN MATCHED THEN
UPDATE SET
Trgt.FullName = Src.FullName,
Trgt.Type= Src.Type,
Trgt.Classification = Src.Classification
WHEN NOT MATCHED BY TARGET THEN
INSERT
(
FullName,
Type,
Classification
)
VALUES
(
Src.FullName,
Src.Type,
Src.Classification
)
OUTPUT Src.[Date], Src.Amount, INSERTED.Id INTO @TransactionsTemp;
MERGE INTO dbo.FinancialReport AS Trgt
USING (SELECT
[Date] ,
Amount ,
ReportColumnsId
FROM @TransactionsTemp) AS Src
ON Src.[Date] = Trgt.[Date] AND Src.ReportColumnsId = Trgt.ReportColumnsId
WHEN NOT MATCHED BY TARGET And Src.Amount <> 0 THEN
INSERT
(
[Date],
Amount,
ReportColumnsId
)
VALUES
(
Src.[Date],
Src.Amount,
Src.ReportColumnsId
)
WHEN MATCHED And Src.Amount <> 0 THEN
UPDATE SET Trgt.Amount = Src.Amount
WHEN MATCHED And Src.Amount = 0 THEN
DELETE;
将来、他の誰かに役立つことを願っています。:)