SQL Server基礎之庫級觸發器

来源:https://www.cnblogs.com/j20171203/archive/2018/10/05/9744456.html
-Advertisement-
Play Games

觸發器分為兩種,一種與數據表綁定,響應數據表指定動作(insert、delete或update),此處稱為表級;一種與資料庫本身綁定,響應數據定義(DDL)語句(主要是CREATE、ALTER 和 DROP 開頭的語句),此處稱為庫級。本篇以下所說觸發器皆指庫級觸發器。 觸發器(又名DDL觸發器)是 ...


  觸發器分為兩種,一種與數據表綁定,響應數據表指定動作(insertdeleteupdate),此處稱為表級;一種與資料庫本身綁定,響應數據定義(DDL)語句(主要是CREATEALTER DROP 開頭的語句),此處稱為庫級。本篇以下所說觸發器皆指庫級觸發器。

  觸發器(又名DDL觸發器)是一段有特定語法,實現一定功能的SQL語句,它與數據庫本身綁定,當數據發生指定動作(主要是CREATEALTER DROP 開頭的語句完整響應事件請看這裡)時,由資料庫自動調用。觸發器可以選擇綁定某一個特定的資料庫,也可以選擇綁定所有的資料庫。當綁定特定資料庫時,觸發器位於圖1紅框位置,當綁定所有資料庫時,位於圖2紅框位置。無論是綁定特定資料庫還是綁定所有資料庫的觸發器,均可以同時存在多個,並且響應同一事件的觸發器也可以同時存在多個。當存在多個響應同一事件的觸發器時,按觸發器建立時間先後決定執行順序,先建立的先執行。觸發器是不能修改的,如果需要修改,必須先刪除再新建。值得特別註意的是,綁定所有資料庫時觸發器可以響應伺服器級別的事件,如CREATE_DATABASE,而綁定特定資料庫時,只能響應與該資料庫相關的事件

   觸發器主要用於防止或者記錄對資料庫架構的更改。下麵是一個防止非sa用戶創建表、綁定所有資料庫的觸發器。

USE [master]
GO
create trigger [tr_FanZhiFeiSaChuangJianBiao]
on all server --作用於SQL Server實例下所有庫
for CREATE_TABLE
as      
  --獲取事件數據
  DECLARE @data XML
  SET @data = EVENTDATA()

  --獲取用戶名
  declare @LoginName nvarchar(150)  
  set @LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'sysname')

  --如果用戶名不是sa則回滾
  if @LoginName<>'sa'
    begin 
        rollback
        return
    end 

觸發器的語法:

CREATE TRIGGER trigger_name --觸發器的名字
ON {database | all server} --確定觸發器是綁定特定數據還是所有資料庫,database代表綁定特定資料庫
{FOR | CREATE_TABLE|CREATE_PROCEDURE }  --確定觸發器響應事件,可以同時綁定多個,多個時使用‘,’分隔,綁定所有事件使用DDL_SERVER_LEVEL_EVENTS
 AS           
sql_statement  --你需要編寫的SQL語句
--刪除綁定所有資料庫的觸發器
drop trigger trigger_name on all server
--刪除綁定特定資料庫的觸發器
drop trigger trigger_name on database
-- 啟動綁定特定資料庫的觸發器
enable trigger trigger_name on database;
-- 禁用名綁定特定資料庫的觸發器
disable trigger trigger_name on database;

-- 啟動綁定所有資料庫的觸發器
enable trigger trigger_name on all server;
-- 禁用名綁定所有資料庫的觸發器
disable trigger trigger_name on all server;
--查詢綁定特定資料庫的觸發器
select * from sys.triggers

--查詢綁定所有資料庫的觸發器
select * from sys.server_triggers

/*觸發器不存在於sys.objects 目錄視圖中,無法對其使用OBJECT_ID 函數*/

  在觸發器里使用 EVENTDATA()函數,可以獲得觸發器上下文事件信息。其返回的是一個XML文件,典型內容如下圖。

--讀取 EVENTDATA()返回的XML
DECLARE @data XML  
SET @data = EVENTDATA()

--讀取XML節點
DECLARE @dbName nvarchar(250) 
SET @dbName = @data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'sysname')

 寫作時間:2018-10-05

 

=====================================================================================
本文只代表本人的見解,可能存在錯誤,僅用於技術交流。如果你喜歡該文,可以掃下麵的二維碼打賞我(打賞敬請備註“博客園打賞”五字)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MIT 6.828是操作系統中最經典的一門課程。完成所有的lab就相當於完成了一個迷你的操作系統。我跟的是2018年的課程,課程首頁在 "6.828課程官網" 。當然所有資料都是英文的,所以難度也不低,這裡推薦幾本非常有用的參考書:《x86彙編語言 從實模式到保護模式》,《程式員的自我修養 鏈接、裝 ...
  • [TOC] 綜合架構圖 主機規劃 ip 伺服器主機名和 IP 規劃參考模板 | 主機名 | eth0 網卡 | eth1 網卡 | 服務簡介 | | | | | | | lb01 | 10.0.0.5/24 | 172.16.1.5/24 | 負載服務 | | lb02 | 10.0.0.6/24 ...
  • 進入超級管理員目錄 su root 下載 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz 找到下載的文件解壓 tar -xzvf Python-3.7.0.tgz 進入解壓好的文件目錄 cd Python-3.7.0 創建安 ...
  • 閑來無事就來搞虛擬機裝操作系統!期間出現很多錯誤,分享一下 一。安裝虛擬機 二。準備安裝的鏡像文件 我下載的是windows7純凈版 深度技術裡面下載的(http://www.xitongzhijia.net/win7/201805/125616.html),在系統之家的安裝不成功 三。準備安裝 1 ...
  • 如下所示,在創建LV的時候,偶爾會遇到“Volume group "xxxx" has insufficient free space (xxxx extents): xxxx required”這類錯誤。表示Volume group的可用空間不夠了。如下測試所示: root@mylnx12:~# ... ...
  • Oracle建表參考網址:http://www.oraclejsq.com/getOracle_jcjc.do?nodeid=010100139 ...
  • MySQL邏輯架構圖 第一層:主要功能是連接處理、授權認證、安全等。相當於JavaEE中的常說的Web層 第二層:包含了MySQL服務端的核心功能,包含查詢緩存、查詢解析、分析、優化等功能。相當於JavaEE中的Service層 第三層:主要是存儲引擎,存儲引擎主要負責數據的存儲和提取。相當於Jav ...
  • 雖然同表級(DML)觸發器和庫級(DDL)觸發器共頂著一個帽子,但登陸觸發器與二者有本質區別。無論表級還是庫級,都是用來進行數據管理的,而登陸觸發器是純粹的安全工具。 登陸觸發器只響應LOGON事件,在登陸資料庫成功後、用戶會話未實際建立前觸發。登陸資料庫失敗,如賬號密碼錯誤,不會激發登陸觸發器。登 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...