insert trigger i et view
Jeg havde en database med to tabeller tblProjects og tblCustomers, den var desværre sat op som at et projekt kunne kun have 1 customer, men 1 customer kunne være på mange projekter.Jeg fandt så ud af at jeg skulle faktisk have det så der var en mange til mange relation imellem disse to tabeller, og derfor oprettede jeg en tabel imellem disse to som jeg kaldte tblProjectMembers, som indeholdte ProjectID fra tblProjects, og CustomerID fra tblCustomers. Og jeg sletter så Customer attributten i tblProjects.
Senere finder jeg så ud af at det jo selvfølgeligt er lidt noget lort for de gamle programmer der benytter disse tabeller. Så jeg tilføjer en en integer kolonne i tblProjectMembers som jeg kalder Ranking, den skulle så beskrive den Customer som de gamle programmer skulle få fat i, når de forsøger at selecte ud fra den tabel, og kun forventer at der er 1 Customer tilknyttet hvert Project.
Så har jeg lavet et view som disse gamle programmer skulle kunne benytte sig af, og så derfor ikke bemærke mine ændringer.
CREATE VIEW tblProjectsvw
AS
SELECT tblProjects.ProjectID,
tblProjects.ProjectName,
tblProjects.ProjectDesciption,
tblProjectMembers.CustomerID,
tblProjects.ProjectStartDate,
tblProjects.ProjectEndDate,
tblProjects.ProjectNumber,
tblProjects.ProjectReferenceNumber,
tblProjects.ProjectPriority,
tblProjects.ProjectExclude
FROM tblProjects, tblProjectMembers
WHERE tblProjects.ProjectID=tblProjectMembers.ProjectID and
tblProjectMembers.Ranking = 1
Det virker kanon når man bare selecter, men går i lort når jeg vil inserte med følgende besked.
Server: Msg 4405, Level 16, State 2, Line 1
View or function 'tblProjectsvw' is not updatable because the modification affects multiple base tables.
Så læste jeg mig frem til at man opretter en "Instead of trigger" til at løse dette problem, den har jeg forsøgt at lave sådan:
CREATE TRIGGER INSERT_TBLPROJECTS
ON tblProjectsvw
INSTEAD OF INSERT
AS
INSERT INTO tblProjects VALUES (ProjectName,ProjectDesciption,ProjectStartDate,ProjectEndDate,ProjectNumber,ProjectReferenceNumber,ProjectPriority,ProjectExclude)
INSERT INTO tblProjectMembers VALUES('4',CustomerID,'1')
GO
og får følgende fejl nu:
Server: Msg 128, Level 15, State 1, Procedure INSERT_TBLPROJECTS, Line 5
The name 'ProjectName' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
Nogen der kan fortælle mig hvordan jeg får det her til at fungere?