-2

创建一个名为 VDept_Headcount 的视图,用于报告每个部门的人数。该报告包括以下 3 列:Dept_Name、Dept_Number、No_Emp。包括所有部门。通过SQL显示视图的内容(Select * from 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 的情况下添加行?

4

1 回答 1

2

真的不想在触发器中添加光标。在您的 SQL 开发生涯中,您绝不应该认为您想将游标添加到任何东西,尤其是触发器。有时您可能不得不使用游标,但您不应该带着将要使用游标的心态着手解决任何任务。第一站是基于集合的解决方案,如果不可能,或者存在性能问题,则探索 RBAR(Row by agonizing Row)方法。

吐槽一下。您可以使用以下命令对所有操作(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

注意最好总是列出您要插入的列,如果以后添加任何列,这将证明您的代码。

于 2017-02-20T17:58:02.860 回答