MSSQL Trigger neue Inserts aus Sicht sollen automatisch in eine Tabelle geschrieben werden
Hallo ich schläge mich gerade mit folgendem Problem rum.
ich habe eine Sicht "View_ZeiterfassungKomplettGrunddaten" in dieser werden aus mehreren Tabellen Daten zusammengeführt und dargestellt.
desweiteren existiert eine Tabelle "dbo.ZeiterfassungKomplett" mit gleichen Spalten wie die View + Extra spalten (STATUS1, STATUS2, STATUS3 etc..).
Hintergrund:
In der Sicht werden die Daten aus verschiedenen Tabellen zusammengeführt und angezeigt, diese Sicht wird initial einmal in die Tabelle "ZeiterfassungKomplett" eingetragen, damit man jetzt verschiedene extra Felder wie (Status1) editieren kann.
Ein Trigger soll nun alle neu hinzukommenden Einträge aus der Sicht in die Tabelle eintragen.
Leider funktioniert mein Trigger nicht... jemand eine IDEE?
ich habe eine Sicht "View_ZeiterfassungKomplettGrunddaten" in dieser werden aus mehreren Tabellen Daten zusammengeführt und dargestellt.
desweiteren existiert eine Tabelle "dbo.ZeiterfassungKomplett" mit gleichen Spalten wie die View + Extra spalten (STATUS1, STATUS2, STATUS3 etc..).
Hintergrund:
In der Sicht werden die Daten aus verschiedenen Tabellen zusammengeführt und angezeigt, diese Sicht wird initial einmal in die Tabelle "ZeiterfassungKomplett" eingetragen, damit man jetzt verschiedene extra Felder wie (Status1) editieren kann.
Ein Trigger soll nun alle neu hinzukommenden Einträge aus der Sicht in die Tabelle eintragen.
Leider funktioniert mein Trigger nicht... jemand eine IDEE?
USE [Database1]
GO
/****** Object: Trigger [dbo].[trCopyData] Script Date: 04/12/2011 10:39:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Markus Brunner
-- Create date: 12. April 2011
-- Description: Automatischer Abgleich der neuen Datensätze aus der View in die Tabelle dbo.UKMCZeiterfassungKomplett
-- =============================================
CREATE TRIGGER [dbo].[trCopyData]
ON [dbo].[View_ZeiterfassungKomplettGrunddaten]
INSTEAD OF INSERT
AS
INSERT INTO dbo.ZeiterfassungKomplett
(MaNr, NAME, VORNAME, Datum, Kommen, Gehen, Pause, Kommentar, Wert1, Wert2, StartZuHause, EndeZuHause, PrivatPKW, km, KommenSort, DatumSort, Einsatzort, HNummer)
SELECT MaNr, NAME, VORNAME, Datum, Kommen, Gehen, Pause, Kommentar, Wert1, Wert2, StartZuHause, EndeZuHause, PrivatPKW, km, KommenSort, DatumSort, Einsatzort, HNummer FROM inserted
GO
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 164403
Url: https://administrator.de/contentid/164403
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
die Frage die sich mir stellt:
schreibst Du
a) direkt in den View also
oder machst Du
b) inserts/updates auf die dem View zu grundliegenden Tabellen?
Im Fall a); Gehen INSERT auf Views? Hab MSSQL schon lang nicht mehr in der Handgehabt.
Im Fall b); Da brauchst Du dann Trigger auf die einzelnen Tabellen.
lg,
Slainte
die Frage die sich mir stellt:
schreibst Du
a) direkt in den View also
INSERT INTO View_ZeiterfassungKomplettGrunddaten ...
b) inserts/updates auf die dem View zu grundliegenden Tabellen?
Im Fall a); Gehen INSERT auf Views? Hab MSSQL schon lang nicht mehr in der Handgehabt.
Im Fall b); Da brauchst Du dann Trigger auf die einzelnen Tabellen.
lg,
Slainte
a) ich mache keine INSERT auf einen VIEW sondern auf eine TABELLE
b) versteh eich nciht ^^
Der Trigger muss für die Tabelle angelegt werden, die im INSERT angesprochen wird, nicht auf einen View (der bekommt davon nix mit)b) versteh eich nciht ^^
Übrigens: mit "INSTEAD OF INSERT" werden die neuen Records nicht in die übprüngliche Tabelle geschrieben.
Bespiel:
Du machst ein "INSERT INTO TabelleA values(...)" und nöchstest
a) das die Daten in TabelleA UND TabelleB stehen:
b) das die Daten NUR in TabelleB stehen
Jetzt klarer?
Im Detail hier nachzulesen.
Du machst ein "INSERT INTO TabelleA values(...)" und nöchstest
a) das die Daten in TabelleA UND TabelleB stehen:
CREATE TRIGGER [dbo].[trCopyData]
ON [dbo].[TabelleA]
FOR INSERT
AS
INSERT INTO TabelleB .... SELECT FROM .... inserted
b) das die Daten NUR in TabelleB stehen
CREATE TRIGGER [dbo].[trCopyData]
ON [dbo].[TabelleA]
INSTEAD OF INSERT
AS
INSERT INTO TabelleB .... SELECT FROM .... inserted
Jetzt klarer?
Im Detail hier nachzulesen.