1. 程式人生 > >學習筆記(三):遊標、觸發器

學習筆記(三):遊標、觸發器

遊標
觸發器:

觸發器的基礎知識:
概念:
對錶進行插入、更新、刪除自動執行的特殊的儲存過程
觸發器與普通儲存過程的區別:
觸發器是當對某一個表進行操作,系統會自動呼叫執行該表上對應的觸發器
分類為:
DML
AFTER(之後)
INSERT
UPDATE
DELETE
INSTEAD OF(之前)
DDL
觸發器有兩種特殊的表:
插入表(INSERTED)
INSERTED表的資料是插入或修改後的資料
刪除表(DELECTD)
DELETED表的資料是更新前的或刪除的資料
遊標:
概念:
使使用者可逐行訪問由SQL Server返回的結果集。

原因:
    就是把集合操作轉換為單個記錄處理方式。
優點:
    允許程式對由查詢語句select返回的行集合中的每一行執行相同或不同的操作,而不是對整個行集合執行同一個操作
    提供對基於遊標位置的表中的行進行刪除和更新的能力
    遊標實際上作為面向集合的資料庫管理系統和麵向行的程式設計之間的橋樑,是這兩種處理方式通過遊標溝通起來。
    遊標的生命週期:    
        宣告
        開啟
        讀取
        關閉  
        釋放
定義遊標:
    DECLARE CURSOR_NAME 遊標名稱
    CURSOR[LOCAL|GLOBAL] 全域性、區域性
    [FORWARD ONLY|SCROLL] 遊標滾動方式
    [READ_ONLY|SCROLL_LOCKS|OPTIMISTIC] 讀取方式
    FOR SELECT_STATEMENTS 查詢語句
    [FOR UPDATE |OF COLUMN_NAME..] 修改欄位
開啟遊標:
    OPEN CURSOR_NAME
    遊標開啟後,可以使用全域性變數@@CURSOR_ROWS顯示讀取記錄條數
檢索遊標:
    FETCH CURSOR_NAME
        FETCH FRIST 讀取第一行
        FETCH NEXT 讀取下一行
        FETCH PRIOR 讀取上一行
        FETCH LAST 讀取最後一行
        FETCH ABSOLUTE N 讀取某一行,
            如果n為正整數,則讀取第n條資料
            如果n為負數,則倒數提取第n條資料
            如果n為0,則不讀取任何記錄
        FETCH PELATIVE N
            如果n為正整數,則讀取上次讀取記錄之後第n條記錄
            如果n為負數,則讀取上次記錄之前第n條記錄
            如果n為空,則讀取上次讀取的記錄
關閉遊標
    遊標開啟後,伺服器會專門為遊標分配一定的記憶體空間存放遊標操作的資料結果集,同時使用遊標也會對某些資料進行封鎖。所以遊標一旦用過,應及時關閉,避免伺服器資源浪費。
    關閉遊標語句:
        CLOSE[GLOBAL] CURSOR_NAME|CURSOR_FARIBALE_NAME
        CLOSE CURSOR_NAME
刪除遊標:
    刪除遊標、釋放資源
        語法:
            DEALLOCATE [GLOBAL] CURSOR_NAME|CURSOR_VARIABLE_NAME
            DEALLOCATE CURSOR_NAME
完整的遊標實列:
    --儲存讀取的值
        DECLARE @ID INT,
            @NAME NVARCHAR(20),
            @AGE NVARCHAR(20)
        DECLARE CURSOR_STU
        CURSOR SCROLL FOR
            SELECT ID,NAME,AGE FROM STUDENT
    --開啟遊標
        OPEN CURSOR_STU
    --讀取第一條記錄
        FETCH FIRST FROM CURSOR_STU INTO @ID,@NAME,@AGE
    --迴圈讀取遊標記錄:
        PRINT '讀取的資料如下'
        --全域性變數 0-FETCH 語句成功。1FETCH 語句失敗或此行不再結果集中。2 被提取的行不存在
            WHILE(@@FETCH_STATUS=0)
            BEGIN
                PRINT '編號'+CONVENT(CHAR(5),@ID)+',名稱:'
[email protected]
,@AGE; --繼續讀取下一條記錄 FETCH NEXT FROM CURSOR_STU INTO @ID,@NAME,@AGE END --關閉遊標 CLOSE CURSOR_STU --刪除遊標 DEALLOCATE CURSOR_STU