Ich habe eine Reihe von aktualisierbaren Ansichten, die wir Endbenutzern als Schnittstelle für einen Back-End-Prozess zur Verfügung stellen.
Eine dieser Ansichten verweist auf zwei Tabellen und erfordert einen INSTEAD OF
Trigger für UPDATE
und INSERT
s.
Die Struktur der Tabellen ist (stark vereinfacht):
Claim
(DataRowID bigint IDENTITY PRIMARY KEY
,<bunch of claim data>)
ClaimExtended
(ClaimDataRowID bigint FOREIGN KEY references dbo.Claim(DataRowID) NOT NULL
,<bunch of other claim data>)
Mein ursprünglicher Plan war es, dies im Auslöser so zu tun:
CREATE TRIGGER [dbo].[MyTrigger] ON [dbo].[MyView]
INSTEAD OF INSERT
AS
DECLARE @IDLink TABLE
(RowID int
,ClaimDataRowID bigint)
DECLARE @Inserted TABLE
(RowID int identity (1,1) NOT NULL
,<all the columns from the view>)
INSERT INTO
@Inserted
(<View columns>)
SELECT
(<View columns>)
FROM
Inserted
INSERT INTO
Claim
(<Columns>)
OUTPUT
I.RowID
,inserted.ClaimDataRowID
INTO
@IDLink (RowID, ClaimDataRowID)
SELECT
(<Columns>)
FROM
@Inserted I
INSERT INTO
ClaimExtended
(ClaimDataRowID,
<Columns>)
SELECT
C.ClaimDataRowID,
<Columns>
FROM
@Inserted I
INNER JOIN
@IDLink C
ON C.RowID = I.RowID
Die OUTPUT
Klausel hier funktioniert jedoch nicht ( Multi-part identifier I.RowID could not be bound
) Ich gehe davon aus, dass ich in einer INSERT
OUTPUT
Klausel nicht auf die Quelltabelle verweisen kann .
Welche andere Methode könnte ich hier verwenden, außer die Ansicht zu einer Tabelle zu machen? Aus anderen Gründen muss dies ein sein VIEW
und die zugrunde liegenden Tabellen sind ziemlich in Stein gemeißelt.