更改我的代码中的视图,不能在时间添加行乘数
问题描述:
创建一个名为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的?
答
您确实不想将光标添加到您的触发器。在你的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,这将是未来证明你的代码,如果任何列后来添加。