SQL中觸發器的使用

創建觸發器 是特殊的存儲過程,自動執行,一般不要有返回值

?

類型:

  1.后觸發器 (AFTER,FOR)先執行對應語句,后執行觸發器中的語句

  2.前觸發器 ?并沒有真正的執行觸發語句(insert,update,delete),而是執行觸發后的語句

  3.行級觸發器 (FOR EACH ROW) 在SQL server 中不存在

?

商品號為1的庫存量:

?

1.后觸發器(實現不同表之間的約束)

?

--實現在銷售量不大于庫存量時,每賣出n件商品,對應商品的庫存要減n,若銷售量大于庫存量,則回滾此次操作
IF EXISTS (SELECT *FROM sysobjects WHERE name='tr_SaleCommodity')DROP TRIGGER tr_SaleCommodity
GO
CREATE TRIGGER tr_SaleCommodity
ON OrderInfo FOR INSERT  --FOR/AFTER為后觸發器
ASBEGINIF EXISTS (SELECT  * FROM inserted I INNER JOIN CommodityInfo C ON I.CommodityId=C.CommodityIdWHERE I.Amount>C.Amount)BEGINROLLBACK  --后觸發器PRINT '商品的銷售量大于商品的庫存量'END    ELSEBEGINUPDATE CommodityInfoSET Amount=Amount-(SELECT Amount FROM inserted)WHERE CommodityId IN(SELECT CommodityId FROM inserted)ENDEND
GO

執行:

INSERT INTO OrderInfo(UserId,CommodityId,Amount,PayMoney,PayWay,OrderTime,Confirm,SendGoods)
VALUES('YOUYOU',1,10,600,'網上銀行','2014-11-11 00:00:00.000',1,1)

結果:

  注意:1.上一行為銷售記錄,下一行為商品1的信息

     2.賣出10個,庫存量由48變為38 

     ? 3.可以看出以上的銷售記錄中的Paymoney是不正確的,它的值應該是Amount*OutPrice=10*300,所以需要前觸發器來約束

?

2.前觸發器(可以實現行級觸發器功能)

?

--實現了日期校驗和支付金額的計算
IF EXISTS(SELECT* FROM sysobjects WHERE name='tr_DateConfim')DROP TRIGGER tr_DateConfim
GO
CREATE TRIGGER tr_DateConfim
ON OrderInfo INSTEAD OF INSERT ,UPDATE
ASBEGINDECLARE @date datetimeSELECT @date=OrderTime FROM insertedIF @date BETWEEN '2012-1-1' AND '2015-1-1'BEGINDECLARE @UserId varchar(20) ,@CommodityId int,@Amount int,@PayMoney money,@PayWay varchar(20),@OrderTime datetime,@Confirm int,@SendGoods intSELECT @UserId=UserId,@CommodityId=CommodityId,@Amount=Amount,@PayWay=PayWay,@OrderTime=OrderTime,@Confirm=Confirm,@SendGoods=SendGoods FROM insertedDECLARE @outPrice moneySELECT @outPrice=OutPrice FROM CommodityInfo WHERE CommodityId=@CommodityIdSET @PayMoney=@outPrice*@AmountPRINT 'inserted 中的數據:'+CONVERT(varchar(20),@UserId)+' '+CONVERT(varchar(20),@CommodityId)+' '+CONVERT(varchar(20),@Amount)+' '+CONVERT(varchar(20),@PayMoney)+' '+CONVERT(varchar(20),@PayWay)+' '+CONVERT(varchar(20),@OrderTime)+' '+CONVERT(varchar(20),@Confirm)+' '+CONVERT(varchar(20),@SendGoods)+' '+CONVERT(varchar(20),@outPrice)INSERT INTO OrderInfo(UserId,CommodityId,Amount,PayMoney,PayWay,OrderTime,Confirm,SendGoods)SELECT UserId,CommodityId,Amount,@PayMoney,PayWay,OrderTime,Confirm,SendGoods FROM insertedENDELSE PRINT '你插入的數據中的時間只能在 2012-1-1 到 2015-1-1 中間'END
GO

執行:

INSERT INTO OrderInfo(UserId,CommodityId,Amount,PayWay,OrderTime,Confirm,SendGoods)
VALUES('YOUYOU',1,5,'網上銀行','2013-1-11',1,1)

  ?注意:這里插入時我并沒有定義PayMoney,PayMoney是通過觸發器來自動計算的

結果:

日期不正確:

?

日期正確:

打印信息對應:@UserId+' '+@CommodityId+' '+@Amount+' '+@PayMoney+' '+@PayWay+' '@OrderTime+' '@Confirm+' '+@SendGoods+' '@outPrice

?

3.行級觸發器(錯誤

  

執行結果:

可以看出在SQL server中并不支持行級觸發器

轉載于:https://www.cnblogs.com/feiquan/p/8685722.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

powershell XML數據保存為HTML

1.設置html頭和尾 beginning內包含表格表頭 $beginning {<html><head><meta charset"utf-8" /><title>Report</title><STYLE type"text/css">h1 {font-family:SegoeUI, sans-serif; font-size:30}th {font-family:…

瀏覽器自動化操作標準--WebDriver

WebDriver是一個瀏覽器遠程控制協議&#xff0c;是一個既定標準&#xff0c;它本身的內容非常豐富&#xff0c;本文不可能全部介紹&#xff0c;本文僅粗略帶大家了解一下WebDriver的部分內容以及一個小的實際應用。想深入了解的請參考W3C文檔WebDriver. 問題背景 開發的同學都知…

versa max_如何從Mac(和Vice Versa)打開或關閉iPhone的Safari選項卡

versa maxMany of us are familiar with this scenario: you’re looking something up on our iPhone, find exactly what we’re looking for, but then have to put our phone away to attend to something else. Later, while working on your Mac, you want to continue w…

【nuxtjs 指南】解決nuxtjs本地開發跨域和防止路由與api沖突問題

目前vue很火&#xff0c;大部分開發者把vue當做框架首選&#xff0c;然而spa是對搜素引擎很不友好&#xff0c;就會想到ssr&#xff0c;在vue社區nuxtjs完美的解決了這個問題&#xff0c;目前nuxt還不算太成熟&#xff0c;當然對于新手坑比較多&#xff0c;當我們確定使用了這個…

WPF效果第二百零五篇之自定義導航控件

前面摸索了一下會簡單玩耍自定義控件了;今天再次分享一下N年前想要在GIS實現的一個導航控件;來看看最終實現的效果:1、先來看看前臺xaml布局:2、后臺路由事件就參照上一篇快捷方式3、關鍵依賴屬性的回調觸發路由事件:4、內部Arc的MouseDown事件觸發路由事件:private void Arc_M…

python3用list實現棧

工作中遇到的需求&#xff0c;****代表標簽數據別的信息&#xff1a; D01  ********  1  ******** D01  ********  2  ******** D01  ********  3  ******** D01  ********  4  ******** D02  ********  1  ******** D02  ********  2  **…

powershell 腳本運行策略,參數....

1.運行策略 Powershell一般初始化情況下都會禁止腳本執行。腳本能否執行取決于Powershell的執行策略。 PS E:> Get-ExecutionPolicy Restricted PS E:> Set-ExecutionPolicy UnRestricted 2.直接運行 PS E:> "Hello,Powershell Script" > MyScript.ps…

linux每日命令(5):mkdir命令

閱讀目錄(Content)1&#xff0e;命令格式&#xff1a;2&#xff0e;命令功能&#xff1a;3&#xff0e;命令參數&#xff1a;4&#xff0e;命令實例&#xff1a;1&#xff1a;創建一個空目錄2&#xff1a;遞歸創建多個目錄3&#xff1a;創建權限為777的目錄4&#xff1a;創建新…

mac命令行將輸出寫入文件_如何在Linux中使用命令行將PDF文件轉換為可編輯文本...

mac命令行將輸出寫入文件There are various reasons why you might want to convert a PDF file to editable text. Maybe you need to revise an old document and all you have is the PDF version of it. Converting PDF files in Windows is easy, but what if you’re usi…

Windows Socket和Linux Socket編程的區別

2019獨角獸企業重金招聘Python工程師標準>>> 1、一些常用函數的移植 http://www.vckbase.com/document/viewdoc/?id1586 2、網絡 socket相關程序從Windows移植到Linux下需要注意的: 1)頭文件 Windows下winsock.h/winsock2.h Linux下sys/socket.h 錯誤處理&…

使用 C# 開發的現代輕量級 Windows 文本編輯器

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具和組件&#xff0c;希望對您有用&#xff01;Notepads 是一個具有簡約設計的現代化輕量級文本編輯器&#xff0c;在 github 上開源&#xff0c;由微軟大佬 Jiaqi Liu 開發。開發背…

分布式壓測系列之Jmeter4.0第一季

1&#xff09;Jmeter4.0介紹 jmeter是個純java編寫的開源壓測工具&#xff0c;apache旗下的開源軟件&#xff0c;一開始是設計為web測試的軟件&#xff0c;由于發展迅猛&#xff0c;現在可以壓測許多協議比如&#xff1a;http、https、soap、ftp、database數據庫、LDAP 輕量目…

powershell 查看系統設備\device status

查看設備 $allDevice"C:\Data\soundDevAll.txt" (Get-WmiObject -Class Win32_SoundDevice).Name|Out-File $allDevice device status $deviceInfoGet-WmiObject Win32_PnPEntity| select Name, Status | where {$_.Name -like "$deviceName"} $set…

Fish Shell 使用筆記

安裝Fish Shell brew install fish 安裝Oh My Fish curl -L https://get.oh-my.fish | fish 安裝Fisher curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish 配置 autojump clone autojump git clone https://github.com/wting/autojum…

Entity Framework Core 7中高效地進行批量數據插入

因為之前的版本中&#xff0c;EF Core無法實現高效地批量插入、修改、刪除數據&#xff0c;所以我開發了Zack.EFCore.Batch這個開源項目&#xff0c;比較受大家的歡迎&#xff0c;獲得了400多個star。從.NET 7開始&#xff0c;微軟在Entity Framework Core 7內置了對高效地批量…

Hive學習之路 (一)Hive初識

Hive 簡介 什么是Hive 1、Hive 由 Facebook 實現并開源 2、是基于 Hadoop 的一個數據倉庫工具 3、可以將結構化的數據映射為一張數據庫表 4、并提供 HQL(Hive SQL)查詢功能 5、底層數據是存儲在 HDFS 上 6、Hive的本質是將 SQL 語句轉換為 MapReduce 任務運行 7、使不熟悉 MapR…

angularJs select綁定的model 取不到值

內容結構 一.原因分析 二. 解決辦法 一.原因分析 1.由于原型繼承的關系&#xff0c;修改父級對象中的someBareValue會同時修改子對象中的值&#xff0c;但反之則不行。2.ng-if 以及 ng-repeat 會創建一個子級作用域&#xff0c;如果在這倆個指令中添加了元素&a…

PS2019攝影后期處理(三)通透....

一、PS可選顏色 在對應顏色進行cmyk加減

(原創) 今天拿到學生證了 (日記)

<原文我在2006/09/07發表在藍色小舖>今天拿到學生證了&#xff0c;終於正式成為臺大的學生。第一件事情就是去臺大圖書館借了四本書回家看&#xff0c;一次可以借兩個月耶&#xff0c;真不錯。 感覺很複雜&#xff0c;下星期要離開華碩&#xff0c;得繳回識別證&#xff…

os 鍵盤快捷鍵截圖_如何通過鍵盤快捷鍵更有效地使用OS X虛擬桌面

os 鍵盤快捷鍵截圖() We like having multiple virtual desktops on OS X, especially when we can supercharge them by combining them with a few simple keyboard shortcuts. So, on that note, here are some practical ways to use OS X’s virtual desktops like you me…