首页 > 解决方案 > 在 sql 视图上更新数据时更新第三个表

问题描述

我有这三个表:

CREATE TABLE tblEmployee1  
(  
 Id int Primary Key,  
 Name nvarchar(30),  
 Gender nvarchar(10),  
 DepartmentId int  
) 

CREATE TABLE tblDepartment1  
(  
 DeptId int Primary Key,  
 DeptName nvarchar(20)  
)

CREATE TABLE tblEmployee  
(  
 Id int Primary Key,  
 Name nvarchar(30),  
 Gender nvarchar(10),  
 DepartmentId int,  
 DeptName nvarchar(20)
) 

其中两个由一个视图连接:

Create view ViewEmployeeDetails1  
as  
Select Id, Name, Gender,DepartmentId, DeptName  
from tblEmployee1  
join tblDepartment1  
on tblEmployee1.DepartmentId = tblDepartment1.DeptId

我创建了触发器,以便在使用数据触发器更新视图时触发并使用视图中的数据更新第三个表(tblEmployee)而没有重复记录。更新视图时,触发器似乎会在 tblEmployee 上插入值。你能帮我用触发器不知道它在哪里磨损我的触发器在下面提前谢谢。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[Update_Employee]
   ON  dbo.ViewEmployeeDetails1 
   INSTEAD OF UPDATE
AS 
BEGIN
insert into dbo.tblEmployee  
([Id], [Name], [Gender], [DepartmentId], [DeptName])

SELECT  i.[Id],i.[Name], i.[Gender], i.[DepartmentId], i.[DeptName] 

        FROM   dbo.ViewEmployeeDetails1  t
       INNER JOIN i
        ON t.Id = i.Id 
        WHERE i.Id IS  NOT NULL
end

标签: sql-servertsqlviewdatabase-trigger

解决方案


表中没有DeptName,所以您似乎想要:

insert into dbo.tblEmployee  ([Id], [Name], [Gender], [DepartmentId])
    SELECT  i.[Id], i.[Name], i.[Gender], i.[DepartmentId]
    FROM inserted i
    WHERE i.Id IS  NOT NULL
end;

推荐阅读