當前位置:首頁 » 服務存儲 » 存儲過程和觸發器的實驗
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程和觸發器的實驗

發布時間: 2023-08-18 05:39:22

sql server如何測試存儲過程與觸發器的建立是否正確

存儲過程用exec 存儲過程名,然後執行
觸發器你可以加上輸出語句,用
as
print '執行了'
如果對update做的,就更新一條數據看看,是否有消息,如果沒有就說明沒建成功,如果有再修改,將輸出刪除就可以了,修改就不是create了,是alter

㈡ 怎麼用SQL server 2000 和VB 做一個存儲過程和觸發器的例子

1. 和特定表或視圖關聯。觸發器定義在特定的表或視圖上,稱為觸發器表或觸發器視圖2. 自動調用。當試圖在某個表插入、更新或刪除數據,而在那個表上定義了針對所做動作的觸發器,那麼觸發器會自動執行3. 不能被直接調用。不像普通的存儲過程,觸發器不能被直接調用,也不傳遞或接受參數4. 是一個事務的部分。觸發器及觸發它的語句被視為單個事務,可以在觸發器內的任何地方被回滾二、創建觸發器創建觸發器,觸發器是一種特殊的存儲過程,在用戶試圖對指定的表執行指定的數據修改語句時自動執行。Microsoft�0�3 SQL Server�6�4 允許為任何給定的 INSERT、UPDATE 或 DELETE 語句創建多個觸發器。1.語法CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { FOR|AFTER|INSTEAD OF}{[INSERT][,][UPDATE]}ASsql_statement [ ...n ] 2.參數trigger_name是觸發器的名稱。觸發器名稱必須符合標識符規則,並且在資料庫中必須唯一。可以選擇是否指定觸發器所有者名稱。Table | view是在其上執行觸發器的表或視圖,有時稱為觸發器表或觸發器視圖。可以選擇是否指定表或視圖的所有者名稱。WITH ENCRYPTION加密 syscomments 表中包含 CREATE TRIGGER 語句文本的條目。使用 WITH ENCRYPTION 可防止將觸發器作為 SQL Server 復制的一部分發布。FOR | AFTER指定觸發器只有在觸發 SQL 語句中指定的所有操作都已成功執行後才激發。所有的引用級聯操作和約束檢查也必須成功完成後,才能執行此觸發器。如果僅指定 FOR 關鍵字,則 AFTER 是默認設置。不能在視圖上定義 AFTER 觸發器。INSTEAD OF指定執行觸發器而不是執行觸發 SQL 語句,從而替代觸發語句的操作。在表或視圖上,每個 INSERT、UPDATE 或 DELETE 語句最多可以定義一個 INSTEAD OF 觸發器。然而,可以在每個具有 INSTEAD OF 觸發器的視圖上定義視圖。{[DELETE][,][INSERT][,][UPDATE]}是指定在表或視圖上執行哪些數據修改語句時將激活觸發器的關鍵字。必須至少指定一個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多於一個,需用逗號分隔這些選項。對於 INSTEAD OF 觸發器,不允許在具有 ON DELETE 級聯操作引用關系的表上使用 DELETE 選項。同樣,也不允許在具有 ON UPDATE 級聯操作引用關系的表上使用 UPDATE 選項。AS是觸發器要執行的操作。sql_statement是觸發器的條件和操作。觸發器條件指定其它准則,以確定 DELETE、INSERT 或 UPDATE 語句是否導致執行觸發器操作。3.注意事項:SQL Server 不允許在觸發器中使用下列語句: ALTER DATABASE、CREATE DATABASE、DROP DATABASE、LOAD DATABASE、LOAD LOG、RESTORE DATABASE、RESTORE LOG三、觸發器實例1.簡單的觸發器,幾種觸發器的比較.CREATE TRIGGER TRIG1 ON 圖書FOR DELETEAS PRINT '觸發器已執行!' 2.在「租借信息表」上創建 INSERT觸發器「借閱冊數」,如果「允借冊數」為0,就不能再借了。CREATE TRIGGER 借閱冊數 ON 借閱AFTER INSERTASIF (SELECT 允借冊數 FROM 讀者,inserted WHERE 讀者.借書證號=inserted.借書證號)=0BEGIN PRINT '你可借書的冊數為0,不能再借圖書了' ROLLBACK TRANSACTIONEND3.在「租借信息」表上創建 INSERT觸發器「借書期限」,如果學生借書時間超過30天則不能借書。CREATE TRIGGER 借書期限 ON 租借信息 AFTER INSERTAS IF EXISTS(SELECT * FROM 租借信息,inserted WHERE 租借信息.借書證號=inserted.借書證號 AND (GETDATE())-租借信息.借書日期)>30 AND 租借信息.還書日期 IS NULL)BEGIN PRINT '你有超期未還的圖書,不能再借圖書了!' ROLLBACK TRANSACTIONEND存儲過程的應用舉例 例1 創建一個「借書過程」存儲過程,該存儲過程實現的功能是幫助讀者完成借書過程。即讀者只要提供借書證號、圖書名稱和圖書的作者,就能完成借書。該程序完成的具體操作是:根據讀者所提供的圖書名稱和作者,在圖書信息表中進行查詢,如果該書未被借出則繼續完成借書操作,否則提示讀者圖書已經惜出。借書操作主要包括三個操作:向「租借信息」表中插入一條記錄(保存該讀者的借書信息),將「圖書信息」表中對應記錄的狀態列設為1(避免他人再惜),將「學生信息」表中對應記錄的借書冊數增1(統計該讀者的借書冊數)。這三個操作要麼都執行,要麼都不執行。USE 圖書借閱管理GOCREATE PROC 借書過程 @借書證號 char(5),@圖書名稱 varchar(40),@作者 varchar(20) AS DECLARE @借閱號 int,@圖書編號 varchar(6) IF EXISTS (SELECT * FROM 圖書信息 WHERE 圖書名稱=@圖書名稱 and 作者=@作者 and 狀態=0) BEGIN BEGIN TRAN SELECT @圖書編號=圖書編號 FROM 圖書信息 --取出圖書所對應的圖書編號 WHERE 圖書名稱=@圖書名稱 and 作者=@作者 and 狀態=0 UPDATE 圖書信息 SET 狀態=1 WHERE 圖書編號=@圖書編號 --修改"狀態"列的值 IF @@error!=0 BEGIN ROLLBACK TRAN PRINT '更新圖書信息表失敗。' RETURN 1 END SELECT @借閱號=借閱號 FROM 租借信息 ORDER BY 借閱號 --取出最大借閱號 IF @借閱號 is null SET @借閱號=0 INSERT 租借信息(借閱號,借書證號,圖書編號,借書日期) VALUES (@借閱號+1,@借書證號,@圖書編號,getdate()) IF @@error!=0 BEGIN ROLLBACK TRAN PRINT '借書失敗。' RETURN 3 END UPDATE 學生信息 SET 借書冊數=借書冊數+1 --修改該讀者的借書冊數 WHERE 借書證號=@借書證號 IF @@error!=0 BEGIN ROLLBACK TRAN PRINT '更新學生信息失敗。' RETURN 4 END COMMIT TRAN PRINT '恭喜您借書成功!圖書編號是:'+@圖書編號 RETURN 0 END ELSE BEGIN PRINT '圖書已經借出或沒有。' RETURN 2 END 執行」借書過程』USE 圖書借閱管理GOEXEC 借書過程 '00006','大學英語(2)','李慧琴' 例2 編寫「還書」存儲過程,要求通過學生的「借書證號」和「圖書編號」來完成還書過程。 還書操作:修改「租借信息」表中的「還書日期」,相應地將「圖書信息」表中對應記錄的「狀態」列的值修改為0,「學生信息」表中「借書冊數」減1。 CREATE PROC 還書 @借書證號varchar(5),@圖書編號 varchar(6),@借書日期 datetime=null AS BEGIN TRAN IF @還書日期 IS NOT NULL UPDATE 租借信息SET 還書日期=@還書日期 WHERE 圖書編號=@圖書編號 AND 借書證號=@借書證號 ELSE UPDATE 租借信息SET還書日期=getdate() WHERE 圖書編號=@圖書編號 AND 借書證號=@借書證號 IF @@ERROR!=0 OR @@ROWCOUNT=0 BEGIN ROLLBACK TRAN PRINT 『還書失敗。』 RETURN 1 END UPDATE 圖書信息 SET 狀態=0 WHERE圖書編號=@圖書編號 IF @@ERROR!=0 OR @@ROWCOUNT=0 BEGIN ROLLBACK TRAN PRINT 『還書失敗。』 RETURN 2 END UPDATE 學生信息 SET 借書冊數=借書冊數-1 WHERE 借書證號=@借書證號IF @@ERROR!=0 OR @@ROWCOUNT=0 BEGIN ROLLBACK TRAN PRINT 『還書失敗。』 RETURN 3 END COMMIT PRINT 『恭喜你還書成功!

㈢ 簡單說說存儲過程與觸發器的概念與作用

存儲過程就是一個sql的程序集 可以包含多個SQL語句 並可以附帶各種邏輯判斷及處理

觸發器 就類似於程序里的事件觸發
只是這里通常是某個欄位的改變 某個表插入了數據 或者刪除某些數據
以上這些處理引發的另外一些表數據的改變