謎題2 缺勤者

來源:互聯網
上載者:User

這個謎題我看的真是。。。。大費腦子。但是總算學會了點東西

這個謎題描述為:有一個資料庫記錄缺勤者。當嚴重性積分達到40分,則自動被解僱。當僱員連續缺勤超過一天,則被認為是長假,第二第三等天都不會統計僱員的嚴重性分數,也不算缺勤。

CREATE Personnel<br />(<br />emp_id INTEGER PRIMARY KEY<br />);<br />CREATE TABLE Absenteeism<br />(<br />emp_id INTEGER NOT NULL REFERENCES Personnel(emp_id) ON DELETE CASCADE,<br />absent_date DATE NOT NULL,<br />reason_code CHAR(40) NOT NULL,<br />severity_points INTEGER NOT NULL CHECK(severity_points BETWEEN 0 AND 4)<br />);

當某個Personnel自動解僱時,Absenteeism的相應記錄就會被刪除,因此我們用串聯刪除技術。

 

1.怎麼管理長假問題。

這裡我們用到觸發器。觸發器講解見我另一篇文章。

當向Absenteeism中插入一條tuple時,則對於每條記錄進行分析,如果發現兩條記錄的時間是連續的,則把後一個時間的嚴重性積分變為0.

create trigger name on Absenteeism<br />for INSERT<br />as<br />IF update(absent_date)<br />begin<br /> UPDATE Absenteeism<br /> set severity_points=0,<br /> reason_code='long term illness'<br /> where exists<br /> (select *<br /> from Absenteeism as A2<br /> where DATEDIFF(dd, A2.absent_date, Absenteeism.absent_date)=1<br /> AND Absenteeism.emp_id=A2.emp_id)<br />end<br />

2.自動解僱問題

這個問題我問了csdn的高手~他們給我的解答是用SQL代理。定時檢測給定SQL語句,這樣就能實現,當然也可以用觸發器,當向Absenteeism插入一個元組,則觸發此語句。

------------------------------------------------------------------------------------------------------------------

management studio中
--SQL Server代理
--右鍵作業
--新增作業
--"常規"項中輸入作業名稱
--"步驟"項
--建立
--"步驟名"中輸入步驟名
--"類型"中選擇"Transact-SQL 指令碼(TSQL)"
--"資料庫"選擇執行命令的資料庫
--"命令"中輸入要執行的語句:
         你要執行的sql語句
--確定
--"計劃"項
--建立計劃
--"名稱"中輸入計劃名稱
--"計劃類型"中選擇你的作業執行安排
--如果選擇"反覆出現"
--點"更改"來設定你的時間安排 
然後將SQL Agent服務啟動,並設定為自動啟動,否則你的作業不會被執行

設定方法:
我的電腦--控制台--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啟動類型--選擇"自動啟動"--確定.
----------------------------------------------------------------------------------------------------------------------

delete from Personnel<br />where emp_id= (<br />select A1.emp_id<br />from Absenteeism as A1<br />where A1.emp_id=Personnel.emp_id<br />AND absent_date<br />BETWEEN DATEADD(dy,-365,GETDATE())<br />AND GETDATE()<br />GROUP BY A1.emp_id<br />having sum(severity_points)>=40<br />);

以下是用於定時檢測自動刪除那些時限超過一年的到期記錄。

delete from Absenteeism<br />where absent_date BETWEEN DATEADD(dy,-365,GETDATE())<br />AND GETDATE();

 

總結:

1.on delete cascade

2.trigger

3.SQLAgent

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.