Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

MSSQL Trigger neue Inserts aus Sicht sollen automatisch in eine Tabelle geschrieben werden

Frage Entwicklung Datenbanken

Mitglied: btotherunner

btotherunner (Level 1) - Jetzt verbinden

12.04.2011, aktualisiert 12:06 Uhr, 4724 Aufrufe, 7 Kommentare

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?

01.
USE [Database1] 
02.
GO 
03.
/****** Object:  Trigger [dbo].[trCopyData]    Script Date: 04/12/2011 10:39:47 ******/ 
04.
SET ANSI_NULLS ON 
05.
GO 
06.
SET QUOTED_IDENTIFIER ON 
07.
GO 
08.
-- ============================================= 
09.
-- Author:		Markus Brunner 
10.
-- Create date: 12. April 2011 
11.
-- Description:	Automatischer Abgleich der neuen Datensätze aus der View in die Tabelle dbo.UKMCZeiterfassungKomplett 
12.
-- ============================================= 
13.
CREATE TRIGGER [dbo].[trCopyData]  
14.
   ON  [dbo].[View_ZeiterfassungKomplettGrunddaten] 
15.
   INSTEAD OF INSERT 
16.
AS 
17.
	INSERT INTO dbo.ZeiterfassungKomplett 
18.
	(MaNr, NAME, VORNAME, Datum, Kommen, Gehen, Pause, Kommentar, Wert1, Wert2, StartZuHause, EndeZuHause, PrivatPKW, km, KommenSort, DatumSort, Einsatzort, HNummer) 
19.
	SELECT MaNr, NAME, VORNAME, Datum, Kommen, Gehen, Pause, Kommentar, Wert1, Wert2, StartZuHause, EndeZuHause, PrivatPKW, km, KommenSort, DatumSort, Einsatzort, HNummer FROM inserted 
20.
GO
Mitglied: SlainteMhath
12.04.2011 um 11:21 Uhr
Moin,

die Frage die sich mir stellt:
schreibst Du

a) direkt in den View also
01.
INSERT INTO View_ZeiterfassungKomplettGrunddaten ...
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
Bitte warten ..
Mitglied: btotherunner
12.04.2011 um 11:24 Uhr
also aus der view soll wirklich nur ausgelesen werden, die werte aus die die view Ihre Daten bezieht sollen unangepasst bleiben.

Das einzige was passieren soll sind, alle neuen Einträge die mit dem Befehl INSERT erstellt werden automatisch auch in die Tablle zu plazieren.

lg
Markus

a) ich mache keine INSERT auf einen VIEW sondern auf eine TABELLE
b) versteh eich nciht ^^
Bitte warten ..
Mitglied: SlainteMhath
12.04.2011 um 11:36 Uhr
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)
Übrigens: mit "INSTEAD OF INSERT" werden die neuen Records nicht in die übprüngliche Tabelle geschrieben.
Bitte warten ..
Mitglied: btotherunner
12.04.2011 um 11:40 Uhr
Kannst du mir anhand eines Bsp. zeigen was du meinst.

Ich habe es so verstanden:

Mein Trigger von oben muss nicht in der View als Trigger erstellt werden, sondern in der Tabelle in der die Daten reinkopiert werden.

Stimmt denn mein Trigger ansonsten?

lg
Markus
Bitte warten ..
Mitglied: SlainteMhath
12.04.2011 um 11:48 Uhr
Bespiel:
Du machst ein "INSERT INTO TabelleA values(...)" und nöchstest

a) das die Daten in TabelleA UND TabelleB stehen:
01.
CREATE TRIGGER [dbo].[trCopyData] 
02.
ON [dbo].[TabelleA] 
03.
FOR INSERT 
04.
AS 
05.
INSERT INTO TabelleB .... SELECT FROM .... inserted
b) das die Daten NUR in TabelleB stehen
01.
CREATE TRIGGER [dbo].[trCopyData] 
02.
ON [dbo].[TabelleA] 
03.
INSTEAD OF INSERT 
04.
AS 
05.
INSERT INTO TabelleB .... SELECT FROM .... inserted
Jetzt klarer?

Im Detail hier nachzulesen.
Bitte warten ..
Mitglied: btotherunner
12.04.2011 um 12:03 Uhr
Eine Frage habe ich trozdem noch

D.h. wenn ich jetzt aus der View die neuen Einträge in meiner Tabelle haben muss, gehe ich folgt vor:
Die original Daten sollen natürlich nicht angefasst/verändert o. gelöscht werden.

1. Gehe in die Tabelle (nicht in die View) um dort den Trigger zu erstellen.
2. In den Trigger trage ich
01.
CREATE TRIGGER [dbo].[trCopyData]  
02.
ON [dbo].[view_Sicht]  
03.
FOR INSERT  
04.
AS  
05.
INSERT INTO richtige_tabelle .... SELECT FROM .... inserted
3. Speichern und hoffen dass es funktioniert
Bitte warten ..
Mitglied: SlainteMhath
12.04.2011 um 12:31 Uhr
Zitat von btotherunner:
Soweit alles richtig, bis auf

ON [dbo].[view_Sicht]

TABELLE, nicht SICHT!!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Outlook & Mail
Neue Besprechungsanfrage automatisch in anderes Exchange Konto umleiten

Frage von MacgregS zum Thema Outlook & Mail ...

VB for Applications
gelöst Beim Bestätigen einer Zelle automatisch zwei neue Zeilen einfügen (5)

Frage von striding zum Thema VB for Applications ...

Server-Hardware
gelöst Neue Serverfestplatten (13)

Frage von Hendrik2586 zum Thema Server-Hardware ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (21)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...