2017-02-20 37 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,這將是未來證明你的代碼,如果任何列後來添加。

相關問題