1

我在 SQL Server 2008 中创建了一个视图,其中包括连接大约 5 个不同的表来访问我需要的数据。

我将如何创建更新触发器来更新此视图中的字段?因此,例如,如果姓氏是 smith,我想将所有名字更新为 peter。

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

您需要为视图创建一个 INSTEAD OF 触发器。您可以检查:

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

于 2012-11-13T15:25:41.737 回答