更改我的代码中的视图,不能在时间上添加行倍数

时间:2017-02-20 17:45:41

标签: sql view groupon

创建一个名为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的情况下添加行?

1 个答案:

答案 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是一个好主意,如果稍后添加任何列,这将为您的代码提供未来证明。