2017-02-20 45 views
-2

创建一个名为VDept_Headcount的视图,该视图报告每个部门的人员总数。该报告包括3列如下:Dept_Name,Dept_Number,No_Emp。包括所有部门。显示视图,通过SQL的内容(从VDept_Headcount选择*;)更改我的代码中的视图,不能在时间添加行乘数

USE COMPANY 
GO 

--1-1) Create a view named VDept_Headcount that reports headcount for each department. 
CREATE VIEW VDept_Headcount(Dept_Name, Dept_Number, No_Emp) 
AS 
SELECT d.DNAME, d.DNUMBER, COUNT(e.DNO) 
FROM DEPARTMENT d LEFT OUTER JOIN EMPLOYEE e ON e.DNO = d.DNUMBER 
GROUP BY d.DNAME, d.DNUMBER; 
GO 

SELECT * 
FROM VDept_Headcount; 



USE COMPANY 

GO 

--Add yourself into Employee 
INSERT INTO EMPLOYEE 
VALUES('Dan', NULL, 'Chan', '122345687', '13-Nov-1948', '323 Williams Ct, Columbus, OH', 'M', 55000, '987654321', 5); 

SELECT * 
FROM VDept_Headcount; 

基本上我想知道有没有办法来添加行不使用Groupon的?

回答

2

确实不想将光标添加到您的触发器。在你的SQL中没有任何一点开发人员应该认为你想添加一个游标到任何东西上,尤其是触发器。有时你可能不得不使用游标,但你不应该着手解决任何你想要使用游标的心态。第一站是基于集合的解决方案,那么如果不可能,或者有性能问题,那么探索一个RBAR(Row by Adjing Row)方法。

Rant over。您可以使用此实现为所有操作(INSERT,DELETE,UPDATE):

INSERT dbo.Audit_Emp_Record (date_of_change, old_Lname, new_Lname, old_ssn, new_ssn, old_dno, new_dno) 
SELECT GETDATE(), 
     d.Lname, 
     i.LName, 
     d.SSN, 
     i.SSN, 
     d.Dno. 
     i.Dno 
FROM inserted AS i 
     FULL JOIN deleted AS d 
      ON i.EmployeeID = d.EmployeeID; -- OR WHATEVER YOUR PK IS 

注:这是一个好主意,always list the columns you are inserting to,这将是未来证明你的代码,如果任何列后来添加。

相关问题