精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

看一下SQL觸發器實戰

運維 數據庫運維
最近有小伙伴向我請求幫助,要寫一個觸發器。我看了一下需求很明確,就是執行更新,插入后觸發一些事件。覺得挺有意思的,于是幫他寫了一下,這里分享給大家。

[[415489]]

本文轉載自微信公眾號「SQL數據庫開發」,作者丶平凡世界。轉載本文請聯系SQL數據庫開發公眾號。

最近有小伙伴向我請求幫助,要寫一個觸發器。我看了一下需求很明確,就是執行更新,插入后觸發一些事件。覺得挺有意思的,于是幫他寫了一下,這里分享給大家。

表結構

有如下四張表:

出勤

組類別

配置

問題

1.更新[出勤_上班時長] 如果:"出勤"表,[出勤_上班時間]或者[出勤_下班時間],列發生改變所觸發事件

  • 更新上述兩列 "出勤"表,出勤_上班時長 = 出勤_下班時間 - 出勤_上班時間
  • 插入上述兩列 "出勤"表,出勤_上班時長不插數據,插入完成后計算它。出勤_上班時長 = 出勤_下班時間 - 出勤_上班時間

2.插入 如果:"出勤"表,[出勤_日期],列發生改變所觸發事件

插入 (配置_日期,組_名,組類別_名,組_號,組類別_號)

查詢[a.出勤_日期,b.組_名,c.組類別_名,a.組_號,c.組類別_號]

創建表結構

根據給定的表結構,我們創建到數據庫中

  1. /* 
  2. 時間:2021-01-25 
  3. 作者:Lyven 
  4. 需求:創建一個觸發器,完成相應的更新和插入功能 
  5. */ 
  6. Use SQL_Road 
  7. CREATE TABLE 出勤 
  8. (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
  9. 出勤_月份 INT , 
  10. 出勤_日期 INT , 
  11. 出勤_上班時間 VARCHAR(20), 
  12. 出勤_下班時間 VARCHAR(20), 
  13. 出勤_上班時長 VARCHAR(20), 
  14. 組_號 VARCHAR(10) 
  15.  
  16. CREATE TABLE 組 
  17. (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
  18. 組_號 VARCHAR(10), 
  19. 組_名 NVARCHAR(20), 
  20. 組類別_號 VARCHAR(10), 
  21. 組_人數 INT 
  22.  
  23. CREATE TABLE 組類別 
  24. (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
  25. 組類別_號 VARCHAR(10), 
  26. 組類別_名 NVARCHAR(20), 
  27. 組類別_時薪 NUMERIC(18,2) 
  28.  
  29. CREATE TABLE 配置 
  30. (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY
  31. 配置_日期 INT
  32. 組_名 VARCHAR(20), 
  33. 組類別_名 NVARCHAR(20), 
  34. 配置_工時 VARCHAR(20), 
  35. 配置_工資 NUMERIC(18,2), 
  36. 組_號 VARCHAR(10), 
  37. 組類別_號 VARCHAR(10) 
  38. GO 

插入測試數據

  1. INSERT INTO 出勤(出勤_月份,出勤_日期,出勤_上班時間,出勤_下班時間,組_號) 
  2. VALUES 
  3. ( 12, 24, '7:30''12:35''01' ), 
  4. ( 12, 25, '8:00''12:28''01' ), 
  5. ( 12, 26, '8:30''12:00''01' ) 
  6.  
  7. INSERT INTO 組(組_號,組_名,組類別_號,組_人數) 
  8. VALUES 
  9. '01''CAD''01', 2 ), 
  10. '02''MAX''02', 1 ), 
  11. '03''U3D''03', 3 ) 
  12.  
  13. INSERT INTO 組類別(組類別_號,組類別_名,組類別_時薪) 
  14. VALUES 
  15. '01', N'自動', 100.00 ), 
  16. '02', N'員工', 200.00 ), 
  17. '03', N'學員', 150.00 ) 
  18.  
  19. INSERT INTO 配置(配置_日期 , 組_名, 組類別_名, 配置_工資 , 
  20. 組_號, 組類別_號) 
  21. VALUES 
  22. ( 24, 'CAD', N'自動', 12.50, '01''01' ), 
  23. ( 25, 'MAX', N'員工', 12.60, '02''02' ), 
  24. ( 26, 'U3D', N'學員', 12.70, '03''03' ) 

需求分析

  1. 第一個需求其實是只要上班時間和下班時間,我們就自動給它算出這個時長,其實這樣的需求在插入的時候就可以解決,這里我們不討論這種優化方案,只是根據這個需求看該如何寫出這個觸發器。
  2. 第二個需求則是在日期發生變動的時候,需要對配置表插入一條數據

這樣我們可以把這兩個需求寫在一個觸發器當中。

測試代碼

  1. CREATE TRIGGER T_出勤  --創建 觸發器 
  2. ON 出勤 
  3. AFTER UPDATE,INSERT   
  4. --一個觸發器可以同時寫更新插入和刪除等動作 
  5. AS 
  6. BEGIN 
  7. --定義變量 
  8. DECLARE @ID INT
  9. DECLARE @出勤_上班時間 VARCHAR(20); 
  10. DECLARE @出勤_下班時間 VARCHAR(20);   
  11. DECLARE @出勤_日期 INT
  12.  
  13. --更新  出勤_上班時長 
  14. IF (UPDATE (出勤_上班時間) OR UPDATE (出勤_下班時間) ) 
  15. --如果出勤_上班時間和出勤_下班時間發生了更新動作,則執行如下代碼 
  16. BEGIN 
  17. --先獲取更新后的值保留在變量中,其中inserted表為系統表,存放更新后的值 
  18.  SELECT 
  19.  @ID=ID, 
  20.  @出勤_上班時間=出勤_上班時間, 
  21.  @出勤_下班時間=出勤_下班時間 
  22.  FROM inserted; 
  23. --將變量傳入到表中,使取到的值唯一,對出勤_上班時長進行更新 
  24. UPDATE 出勤 SET 出勤_上班時長= 
  25. CONVERT(varchar(100) , DATEADD(ss, DATEDIFF(ss, 出勤_上班時間, 出勤_下班時間), 0), 108) 
  26. WHERE ID=@ID  
  27. AND (出勤_上班時間=@出勤_上班時間 
  28. OR 出勤_下班時間=@出勤_下班時間); 
  29. END 
  30.  
  31. --插入配置信息 
  32. IF UPDATE (出勤_日期) 
  33. --當出勤_日期發生了變動,我們執行如下更新。 
  34. BEGIN 
  35. --獲取更新后的值傳給變量 
  36.  SELECT  
  37.  @ID=ID , 
  38.  @出勤_日期=出勤_日期 
  39.  FROM inserted; 
  40.  --執行插入操作 
  41. INSERT INTO  配置(配置_日期,組_名,組類別_名,組_號,組類別_號) 
  42.  SELECT  
  43.  a.出勤_日期,b.組_名,c.組類別_名,a.組_號,c.組類別_號 
  44.  FROM 出勤 a 
  45.  JOIN 組 b ON a.組_號 = b.組_號 
  46.  JOIN 組類別 c ON b.組類別_號 = c.組類別_號 
  47.  WHERE a.ID=@ID  
  48.  AND  a.出勤_日期=@出勤_日期   
  49. END   
  50. END 

代碼解讀

1、觸發器的語法這個必須掌握,本案例是在SQL Server下執行的,其他關系數據庫的語法可能不同,請注意一下。

2、觸發器中可以實現多種不同的操作,更新,刪除,插入均可寫在一個觸發器上,當然要視情況而定

3、觸發器在執行時會將更新前的數據存放在臨時表deleted中,在更新后會將數據存放在臨時表inserted中,這里我們就用到了臨時表inserted

4、在更新上班時長時用到了時間處理函數DATEDIFF和DATEADD,兩個函數是比較常用的時間處理函數,必須掌握。

5、參數傳遞是代碼中比較重要一環,我們是先將臨時表中的數據存放在一個變量中保存,在我們真正進行更新或插入操作時候再把這個變量取出來使用,就是將變量再次傳遞給條件語句。

測試功能

1、在測試數據之前,我們先看看出勤表和配置表中的數據

出勤

我們看到出勤_上班時長是沒有數據的,下面我們開始更新

  1. UPDATE 出勤 SET 出勤_上班時間='7:00' 
  2. WHERE ID=1 

執行完后我們再看出勤表中的數據是否有變化

從上圖可以看出,結果符合我們預期,同理更新下班時間也會對上班時長進行更新操作,這里就不演示了。

2、我們插入數據是否也會更新上班時長呢?我們執行如下語句

  1. INSERT INTO 出勤(出勤_月份,出勤_日期, 
  2. 出勤_上班時間,出勤_下班時間,組_號) 
  3. VALUES (12,11,'8:30','12:00','01'

執行完后我們查看一下結果

結果也符合我們的預期。

3、當出勤表中的日期被更新的時候,配置表里是否會插入了一條數據?我們先看看配置表中的數據

我們對出勤表中的日期進行更新操作,看配置表會不會多一條記錄?

  1. UPDATE dbo.出勤 SET 出勤_日期='22' 
  2. WHERE ID=2 

更新后我們看看配置表中的數據

結果也符合我們的預期。

總結

整個案例其實精華部分就只是觸發器部分,但是為了讓小伙伴們能更加清晰的閱讀和思考,故將整個案例從需求到測試都給大家展現出來。而觸發器部分如果對其語法比較了解,使用起來并沒有想象的那么難。

當然其中有一些小技巧還是需要大家去了解一下,就比如將更新和插入操作寫在一個觸發器是可以的。我們也可以指定只有哪幾列發生更新操作的時候才執行相應的語句。最后,如果你有一些比較經典的需求,也可以發送給我,興許下次展示的就是你的案例啦!

 

責任編輯:武曉燕 來源: SQL數據庫開發
相關推薦

2009-09-18 14:31:33

CLR觸發器

2011-03-28 10:05:57

sql觸發器代碼

2011-10-12 11:07:12

iCloudiOS5蘋果

2011-05-20 14:06:25

Oracle觸發器

2010-09-01 16:40:00

SQL刪除觸發器

2009-04-07 13:56:03

SQL Server觸發器實例

2010-09-13 17:03:34

sql server觸

2021-07-30 10:33:57

MySQL觸發器數據

2009-04-26 22:27:54

觸發器密碼修改數據庫

2020-07-17 08:36:16

JVM性能監控

2023-10-23 10:20:25

2010-03-15 10:35:46

三層交換

2010-07-16 10:19:31

2010-11-12 15:35:55

SQL Server約

2010-07-06 14:47:03

SQL Server數

2010-10-20 14:34:48

SQL Server觸

2010-10-22 11:10:43

SQL Server觸

2010-11-08 11:49:24

SQL Server管

2011-03-03 09:30:24

downmoonsql登錄觸發器

2017-03-03 10:37:07

Java泛型設計
點贊
收藏

51CTO技術棧公眾號

中文字幕国产免费| 蜜桃久久精品乱码一区二区| 亚洲欧美精品aaaaaa片| 国产精品久久久久久久久久久久久久久 | 久久久久久久一区二区| 草草地址线路①屁屁影院成人| 国产一区二区三区影视| 亚洲精品视频免费观看| 久久av一区二区三区亚洲| 在线不卡免费视频| 亚洲区欧美区| 最好看的2019年中文视频| 亚洲黄色小说在线观看| 亚洲www免费| 亚洲综合免费观看高清完整版| 欧洲精品码一区二区三区免费看| 国产又黄又粗又硬| 久久精品一区二区国产| 欧美理论片在线观看| 最新中文字幕av| 盗摄牛牛av影视一区二区| 欧美性猛片xxxx免费看久爱| 青青青青草视频| 免费网站成人| 国产女人18水真多18精品一级做| 国产精品区免费视频| 伊人精品在线视频| 美女国产一区| 97久久超碰福利国产精品…| 免费成年人视频在线观看| 狠狠操综合网| 日韩精品在线观看一区二区| www.成人黄色| 成人国产精品| 亚洲国产sm捆绑调教视频| 伊人狠狠色丁香综合尤物| 欧美色图另类| 91免费在线播放| 国产欧美亚洲日本| 国产高清视频免费| 久久99国产精品麻豆| 国产精品91在线观看| 91九色丨porny丨肉丝| 国产精品多人| 色综合久久久久久中文网| 成年人免费视频播放| 黄色不卡一区| 亚洲图片欧洲图片av| 中文字幕一区二区久久人妻网站| 97色成人综合网站| 日韩欧美国产综合在线一区二区三区| 777一区二区| gogo大尺度成人免费视频| 欧美色老头old∨ideo| av在线无限看| 99久久精品一区二区成人| 日本乱人伦一区| 999在线免费视频| 国产精品久久久久av电视剧| 日本久久一区二区三区| 中文久久久久久| 国产精品高潮久久| 欧美性大战久久久久久久蜜臀| 韩国日本在线视频| 欧美va在线观看| 欧美日韩国产一区二区三区地区| 182午夜视频| 欧洲精品99毛片免费高清观看| 日韩欧美国产一区二区三区| 影音先锋资源av| 国产极品模特精品一二| 精品亚洲一区二区三区在线观看| 黑人巨大精品欧美| 欧美色婷婷久久99精品红桃| 日韩在线观看免费高清| 毛片aaaaa| 国产欧美综合一区二区三区| 国产精品成av人在线视午夜片| 中文字幕在线观看高清| 国产一区二区精品久久91| av一本久道久久波多野结衣| 日韩精品福利| 中文字幕在线不卡国产视频| 成人在线免费高清视频| 色多多在线观看| 欧美三级乱人伦电影| 男女视频在线观看网站| 国产图片一区| 一本色道久久88亚洲综合88| a级片在线观看免费| 国产精品婷婷| 91精品视频免费看| 少妇精品视频一区二区| 中文成人av在线| 丁香六月激情婷婷| 国产精品极品美女在线观看| 制服.丝袜.亚洲.中文.综合| 亚洲中文字幕无码av| 青青一区二区三区| 久久免费视频网站| 中文字幕av免费观看| 国产成人激情av| 亚洲v国产v在线观看| 污片在线免费观看| 在线观看亚洲a| 麻豆短视频在线观看| 欧美精品一区二区久久| 欧美激情综合色综合啪啪五月| 艳妇乳肉豪妇荡乳av无码福利| 国产成人免费视频网站高清观看视频 | 亚洲一区二区天堂| 91女厕偷拍女厕偷拍高清| 日本xxx免费| se69色成人网wwwsex| 精品国产免费人成在线观看| 四虎地址8848| 视频在线观看91| 精品蜜桃传媒| 影院在线观看全集免费观看| 在线看不卡av| 亚洲欧美色图视频| 精品成人在线| 91久久久一线二线三线品牌| 波多野结衣一区二区| 天天av天天翘天天综合网色鬼国产| 国产又粗又长又爽又黄的视频| 久久av网址| 欧美最猛性xxxx| 少妇高潮一区二区三区69| 亚洲欧美国产77777| 午夜免费高清视频| 国产精品免费大片| 55夜色66夜色国产精品视频 | 国产精品99| 亚洲性视频网址| www欧美在线| 不卡av免费在线观看| 国产激情在线看| 国产精品xnxxcom| www国产精品com| 中文在线观看av| 国产视频不卡一区| 日本成人中文字幕在线| 免费观看久久av| 日韩av成人在线| 黄色av免费在线观看| 狠狠躁夜夜躁久久躁别揉| 波多野结衣办公室双飞| 好看的亚洲午夜视频在线| 99re在线观看| 超碰在线97国产| 亚洲精品电影久久久| 日韩在线观看第一页| 不卡的av在线播放| 成人免费观看视频在线观看| 一本色道久久综合狠狠躁的番外| 欧美中文在线字幕| 国产日产精品久久久久久婷婷| 日本电影亚洲天堂一区| 中文字幕伦理片| 麻豆精品久久精品色综合| 一区二区三区四区五区精品| 国产高清亚洲| 欧美丰满少妇xxxxx做受| 成人午夜福利视频| 日韩欧美中文字幕在线播放| 日韩精品无码一区二区三区久久久| 日日摸夜夜添夜夜添精品视频| 亚洲欧洲一二三| 电影一区中文字幕| 久久久久久国产免费| 性xxxxbbbb| 在线国产亚洲欧美| 亚洲视频重口味| 成人一区二区三区在线观看| 欧美 国产 综合| 欧美另类69xxxxx| 147欧美人体大胆444| 91福利在线免费| 中文字幕亚洲第一| 性猛交富婆╳xxx乱大交天津| 亚洲超碰精品一区二区| 精品人妻一区二区三区四区| 激情五月激情综合网| 高清欧美精品xxxxx| 国产探花在线精品一区二区| 亚洲精品日韩av| 免费毛片b在线观看| 色妞久久福利网| 日批视频在线播放| 欧美日韩高清一区二区三区| 久久精品国产亚洲av麻豆色欲| 久久精品一区二区| 黄色aaaaaa| 免费亚洲视频| 成人污网站在线观看| 亚洲瘦老头同性70tv| 亚洲精品免费网站| 成人直播视频| 欧美激情一区二区三区高清视频 | 欧美激情影院| 91精品在线国产| 国产精品av一区二区三区| 欧美成人免费视频| 国产粉嫩一区二区三区在线观看| 精品日韩一区二区三区免费视频| 国产一级片av| 精品动漫一区二区三区| 国产盗摄一区二区三区在线| 久久久99免费| 亚洲一区二区三区四区五区六区 | 亚洲一区二区三区视频播放| 日韩欧美一区二区三区在线观看 | 中文字幕日韩三级| 精品高清一区二区三区| 激情四射综合网| 中文字幕五月欧美| 成人黄色免费网址| 99精品视频在线观看| 亚洲成人激情小说| 激情欧美一区二区| 91视频免费版污| 国产欧美一区二区三区国产幕精品| 成人短视频在线观看免费| 日韩综合网站| 午夜久久资源| 精品久久久久久久| 欧美日韩在线高清| 午夜精品福利影院| 狠狠久久综合婷婷不卡| y111111国产精品久久久| 成人高清视频观看www| 日韩欧美精品一区二区综合视频| 青青久久av北条麻妃海外网| 鲁鲁在线中文| 欧美怡春院一区二区三区| 96av在线| 午夜精品久久17c| 999av小视频在线| 久久青草福利网站| 波多野结依一区| 97视频在线观看免费高清完整版在线观看 | 熟女少妇精品一区二区| 久久精品导航| 中文字幕欧美人妻精品一区| 久久久久久婷| 欧美日韩在线观看不卡| 青青青爽久久午夜综合久久午夜 | xxxx 国产| 亚洲国产日日夜夜| 日韩精品一区二区三| 偷拍一区二区三区四区| 99久热在线精品996热是什么| 欧美日韩国产精品| √资源天堂中文在线| 色婷婷久久久久swag精品| 婷婷激情五月综合| 欧美日韩国产中文| av无码精品一区二区三区宅噜噜| 日韩午夜在线影院| 色婷婷av一区二区三| 日韩高清有码在线| 国产中文字幕在线视频| 中日韩美女免费视频网址在线观看 | 成人黄色一级视频| 巨胸大乳www视频免费观看| 久久久综合九色合综国产精品| 亚洲黄色小说视频| 国产精品美女久久久久久 | 真实国产乱子伦精品一区二区三区 | 岛国在线大片| 久热精品在线视频| 91九色在线看| 国产精品视频xxxx| 亚洲一区二区免费在线观看| 精品在线视频一区二区| 欧美日韩黑人| 中文字幕色呦呦| 在线亚洲自拍| 制服丝袜中文字幕第一页| 国产91丝袜在线观看| 亚洲综合色一区| ●精品国产综合乱码久久久久 | 五月婷婷在线观看| 九九热这里只有精品免费看| 日韩欧美精品一区二区三区| 国产精品免费小视频| 亚洲精品一区二区三区中文字幕| 免费精品视频一区二区三区| 久久精品亚洲人成影院 | 高清电影一区| 不卡日韩av| 欧美日韩久久精品| 18禁裸男晨勃露j毛免费观看| 日韩中文字幕一区二区三区| 中文字幕 欧美 日韩| 久久久噜噜噜久久人人看| 色欲一区二区三区精品a片| 黑人欧美xxxx| 亚洲第一成人av| 在线日韩第一页| av成人 com a| 亚洲综合大片69999| 国产探花一区二区| 欧美 日韩 激情| 国产经典欧美精品| www.日本高清视频| 五月激情综合婷婷| 午夜精品一区二区三| 日韩中文在线观看| 欧美韩国亚洲| 久久久久久九九| 国模吧视频一区| 岛国av免费在线| 久久久99久久精品欧美| 成年人免费看毛片| 欧美mv日韩mv| 很黄的网站在线观看| 国产精品久久久久久久久久| 免费日韩一区二区三区| 成人在线免费观看网址| 免费在线视频一区| 91网站免费入口| 黄色成人在线免费| 手机av免费在线观看| 免费99精品国产自在在线| 欧美成人xxxx| 先锋影音网一区| 久久伊人亚洲| 国产成人av一区二区三区不卡| 午夜精品福利久久久| 黄色a在线观看| 国内成人精品一区| 99a精品视频在线观看| 中国女人做爰视频| 国产一区二区三区黄视频 | 五月天丁香久久| 婷婷伊人综合中文字幕| 欧美激情成人在线视频| 涩爱av色老久久精品偷偷鲁 | 好吊色欧美一区二区三区四区| 午夜天堂精品久久久久| 日韩不卡的av| 亚洲免费av高清| 亚洲国产成人一区二区| 欧美成人免费全部| 第一区第二区在线| 99在线精品免费视频| 91在线小视频| 免费日韩一级片| 国产亚洲精品美女久久久| 456亚洲精品成人影院| 日本午夜精品电影| 日本sm残虐另类| 波兰性xxxxx极品hd| 91超碰这里只有精品国产| 51xtv成人影院| 国产一区在线免费| 老鸭窝91久久精品色噜噜导演| 国产交换配乱淫视频免费| 欧美在线啊v一区| 黄视频网站在线| 黑人中文字幕一区二区三区| 久久婷婷丁香| 中文字幕无码日韩专区免费| 91精品国产综合久久精品麻豆| 影院在线观看全集免费观看| 狠狠色综合一区二区| 日日嗨av一区二区三区四区| 波兰性xxxxx极品hd| 亚洲精品一区二区三区蜜桃下载| 无遮挡在线观看| 亚洲视频在线观看日本a| 国产精品 日产精品 欧美精品| 国产特黄大片aaaa毛片| 亚洲视频综合网| 日韩三级久久| 日韩av三级在线| 中文字幕在线视频一区| 刘亦菲毛片一区二区三区| 日本精品久久久久影院| 国产精品精品国产一区二区| 国产精品久久久久久亚洲av| 91国偷自产一区二区三区观看 | 蜜桃视频在线观看视频| 国产主播精品在线| aⅴ色国产欧美| 美国黄色片视频| 日韩精品福利在线| 婷婷丁香久久| 男女高潮又爽又黄又无遮挡| 亚洲色欲色欲www| 免费人成在线观看网站| 亚洲一区美女视频在线观看免费| 99伊人成综合| 天天做夜夜爱爱爱| 国产视频精品va久久久久久| 免费观看在线一区二区三区| 久久久久久久久久福利| 亚洲一级二级在线|