创建一个名为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的情况下添加行?
答案 0 :(得分:2)
您真的不希望将光标添加到触发器中。在您的SQL开发生活中,您从未想过要将光标添加到任何东西,尤其是触发器。有时你可能不得不使用光标,但是你不应该开始用你想要使用光标的思维方式来解决任何任务。第一站是基于集合的解决方案,如果不可能,或者有性能问题,那么探索RBAR(Row by agonizing 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
N.B。 always list the columns you are inserting to是一个好主意,如果稍后添加任何列,这将为您的代码提供未来证明。