2012-11-13 3 views
1

SQL Server 2008에서 필요한 데이터에 액세스 할 수있는 약 5 개의 테이블을 결합한 뷰를 만들었습니다.업데이트 트리거 SQL Server 2008

이보기 내에서 필드를 업데이트하기 위해 업데이트 트리거를 만드는 방법은 무엇입니까? 예를 들어, 성을 스미스라고하면 피터에게 모든 이름을 업데이트하고 싶습니다. 이것은 내가 무엇을 가지고 사전에

If Fname = peter 
update Sname to Smith 
end if 

많은 감사

UPDATE 지금까지

CREATE TRIGGER SurName 
    ON ViewCustomer 
    AFTER UPDATE 
AS 
if FName= 'Peter' 
BEGIN 
    update ViewCustomer set SName= 'Smith' 
    SET NOCOUNT ON; 

END 
GO 
+1

지금까지 시도한 것은 무엇이고 어떤 특정 문제가 있습니까? 보기에서 트리거를 만드는 방법에 대한 [설명서] (http://msdn.microsoft.com/en-us/library/ms189799(v=sql.100).aspx)를 읽었습니까? – Pondlife

+0

안녕 Pondlife, 내가 시도한 코드로 내 질문을 업데이트했지만 내보기 'ViewCustomer'을 찾을 수 있다고 말하는 오류가 표시됩니다. " 'ViewCustomer'개체가 없거나이 작업에 유효하지 않습니다." – Annoscia

+0

'ViewCustomer'보기를 보여줄 수 있습니까? – Parado

답변

3

이 작업을 수행해야합니다.

표 및보기 정의.

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; 

트리거 정의.

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 

샘플 데이터

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'); 

이 업데이트는 트리거가 SNAME에 '스미스'

UPDATE ViewCustomer 
SET FName = 'Peter' 
WHERE ID = 1 

Here 그것을위한 SQLFiddle 인을 업데이트하게됩니다.