1

必要なデータにアクセスするために、約 5 つの異なるテーブルを結合したビューを SQL Server 2008 で作成しました。

このビュー内のフィールドを更新する更新トリガーを作成するにはどうすればよいですか? たとえば、姓がスミスの場合、すべての名をピーターに更新したい場合。

If Fname = peter
update Sname to Smith
end if

よろしくお願いします

更新これは私がこれまでに持っているものです

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

END
GO
4

2 に答える 2

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 を「Smith」に更新します。

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

これはそのためのSQLFiddleです。

于 2012-11-13T15:42:24.363 に答える
0

ビューのINSTEADOFトリガーを作成する必要があります。あなたはチェックすることができます:

http://msdn.microsoft.com/en-us/library/ms188601.aspx

于 2012-11-13T15:25:41.737 に答える