2017-02-20 1 views
-2

各部門の人員数を報告するVDept_Headcountという名前のビューを作成します。このレポートには、Dept_Name、Dept_Number、No_Empという3つの列があります。すべての部署を含める。グルーポンを使用せずに行を追加する方法はありコード内のビューを変更すると、時刻に行の乗算を追加できません

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; 

は基本的に私が知りたい、SQLによるビューの内容を表示(VDept_Headcountから選択*)?

答えて

2

実際にはトリガーにカーソルを追加したくない場合。あなたのカーソルを何か、特にトリガーに追加したいと思っている人は、あなたのSQL開発段階にはいらないでしょう。場合によってはカーソルを使用する必要があるかもしれませんが、カーソルを使用するという考え方でタスクを解決するように設定しないでください。最初の停止はセットベースの解決策であり、可能でない場合、またはパフォーマンスの問題がある場合は、RBAR(Row by agonizing Row)アプローチを探索します。

ラントオーバー。あなたは使用して(、INSERT、UPDATE、DELETEを)すべてのアクションのためにこれを達成することができます

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には良いアイデアです。後で列が追加された場合には、これが将来のコードになります。

関連する問題