Hallo Leute,
ich möchte bei einem Insert oder Update auf Tabelle A einen Insert in Tabelle B machen, sofern in Tabelle A ein logisches Feld auf true gesetzt ist und anschließend eine Referenz schaffen.
Also z. B Tabelle A:
ID, TabelleBID, ErstelleBEintrag (bit)
führt einen leeren Insert auf TabelleB aus und trägt dessen erstellte ID in Tabelle A ein und setzt ErstelleBEintrag auf 0 bzw. false:
Tabelle A danach:
ID, TabelleBID, ErstelleBEintrag (bit)
1, 1000001, 0
Tabelle B:
ID, weitere Felder leer
1000001, ..............
Ich habe das ganze bereits mit einer SQL WHILE Schleife im Trigger umgesetzt, die allerdings nicht sehr performant ist:
Lässt sich das ganze auch effizienter umsetzen ohne auf die Sinnhaftigkeit des Vorgangs einzugehen.
Gerade beim Update auf TabelleA sind auch schnell mal ein paar mehr Datensätze betroffen bei der die WHILE Schleife recht langsam ist. Weiterhin werden noch mehr Vorgänge ausgeführt, auf die ich hier nicht weiter eingehen möchte (Sync bestimmter Felder zwischen den Tabellen 1 zu 1 Beziehung)
ich möchte bei einem Insert oder Update auf Tabelle A einen Insert in Tabelle B machen, sofern in Tabelle A ein logisches Feld auf true gesetzt ist und anschließend eine Referenz schaffen.
Also z. B Tabelle A:
ID, TabelleBID, ErstelleBEintrag (bit)
Code:
INSERT oder UPDATE INTO TabelleA (ID, ErstelleBEintrag) VALUES (1, 1)
führt einen leeren Insert auf TabelleB aus und trägt dessen erstellte ID in Tabelle A ein und setzt ErstelleBEintrag auf 0 bzw. false:
Tabelle A danach:
ID, TabelleBID, ErstelleBEintrag (bit)
1, 1000001, 0
Tabelle B:
ID, weitere Felder leer
1000001, ..............
Ich habe das ganze bereits mit einer SQL WHILE Schleife im Trigger umgesetzt, die allerdings nicht sehr performant ist:
Code:
SELECT * INTO #tmpinserted FROM inserted
DECLARE @id uniqueidentifier
WHILE (SELECT Count(*) FROM #tmpinserted) > 0
BEGIN
SELECT TOP 1 @id= id FROM #tmpinserted
/* Pseudocode */
wenn ErstelleBId == 1
dann insert in Tabelle B und anschließendes Update auf Tabelle A mit SCOPE_IDENTITY von TabelleB
/* Pseudocode ende */
DELETE #tmpinserted WHERE id= @id
END
Lässt sich das ganze auch effizienter umsetzen ohne auf die Sinnhaftigkeit des Vorgangs einzugehen.
Gerade beim Update auf TabelleA sind auch schnell mal ein paar mehr Datensätze betroffen bei der die WHILE Schleife recht langsam ist. Weiterhin werden noch mehr Vorgänge ausgeführt, auf die ich hier nicht weiter eingehen möchte (Sync bestimmter Felder zwischen den Tabellen 1 zu 1 Beziehung)