Reputation: 117
I have created a view in SQL server 2008 which consists of the joining of about 5 different tables to access the data i need.
How would i create an update trigger to update a field within this view? So for example if i wanted to update all first names to peter if the last name is smith.
If Fname = peter
update Sname to Smith
end if
Many thanks in advance
UPDATE this is what i have so far
CREATE TRIGGER SurName
ON ViewCustomer
AFTER UPDATE
AS
if FName= 'Peter'
BEGIN
update ViewCustomer set SName= 'Smith'
SET NOCOUNT ON;
END
GO
Upvotes: 1
Views: 10549
Reputation: 4640
This should do the job.
Table and view definitions.
CREATE TABLE Customer
(ID int,
FName varchar(200),
SName varchar(200),
RoleID int);
CREATE TABLE CustomerRole
(RID int,
Name varchar(100));
CREATE VIEW ViewCustomer AS
SELECT *
FROM Customer JOIN CustomerRole on RoleID = RID;
Trigger definition.
CREATE TRIGGER ViewCustomerTrigger ON ViewCustomer
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON
UPDATE Customer
SET FName = I.FName,
SName = CASE I.FName WHEN 'Peter' THEN 'Smith' ELSE I.SName END,
RoleID = I.RoleID
FROM INSERTED I JOIN Customer C ON I.ID = C.ID
UPDATE CustomerRole
SET Name = I.Name
FROM INSERTED I JOIN CustomerRole R ON I.RID = R.RID
END
GO
Sample data
INSERT INTO Customer (ID, FName, SName, RoleID)
VALUES (1, 'John', 'Wayne', 1);
INSERT INTO Customer (ID, FName, SName, RoleID)
VALUES (2, 'Jack', 'Jackson', 1);
INSERT INTO CustomerRole (RID, Name)
VALUES (1, 'Manager');
This update will cause the trigger to update the SName to 'Smith'
UPDATE ViewCustomer
SET FName = 'Peter'
WHERE ID = 1
Here is a SQLFiddle for it.
Upvotes: 3
Reputation: 735
You need to create an INSTEAD OF trigger for views. You can check on:
http://msdn.microsoft.com/en-us/library/ms188601.aspx
Upvotes: 0