SQL Server -- 回憶筆記(五):T-SQL編程,系統變數,事務,游標,觸發器 ...
SQL Server -- 回憶筆記(五):T-SQL編程,系統變數,事務,游標,觸發器
1. T-SQL編程
(1)聲明變數
declare @age int
(2)為變數賦值
set @age=26
(3)while迴圈
declare @i int=1 while @i<=100 begin print @i @i=@i+1 end
(4)if else
if @i>10 begin print '大於10' end else if @i>5 begin print '大於5' end else begin print '小於等於5' end
(5)系統變數
@@version: 返回 SQL Server的當前安裝的系統和生成信息。
@@error: 上一條sql語句出錯,會有錯誤號;上一條sql執行沒出錯,則為0。
@@lanuage: 返回當前所用語言的名稱。
@@max_connections: 返回 SQL Server實例允許同時進行的最大用戶連接數。(實際允許的用戶連接數還依賴於所安裝的 SQL Server的版本以及應用程式和硬體的限制)
@@Rowcount: 上一條sql語句影響的行數。
@@servername: 返回正在運行 SQL Server的本地伺服器的名稱。
@@connections: 此函數返回 SQL Server自上次啟動以來嘗試的連接數,無論連接是成功還是失敗。
(6)事務
一個事務中,不能一個sql語句執行成功,一個執行失敗。只要有一個sql語句執行失敗,就是失敗。
自動提高事務:當執行一條sql語句,資料庫自動打開一個事務,執行成功->自動提交,執行失敗->自動回滾。
隱式事務:當執行一條sql語句,資料庫自動打開一個事務,需要手動提交,手動回滾。(打開隱式事務:set implicit_Transactions ON)
顯式事務:需要手動打開事務,手動提交,手動回滾。
打開一個事務:
begin transaction declare @sum int=0 update tableA set Name='大鬍子' where id=2 set @sum=@sum+@@error update tableB set Name='大鬍子' where id=2 set @sum=@sum+@@error if @sum<>0 begin rollback --回滾,也可寫rollback transaction end else begin commit --提交,也可寫commit transaction end
2. 游標cursor (相當於C#中的For)
定義游標:
declare Mycursor cursor for select UserName,Age,Email from tbUsers
使用游標:
open Mycursor declare @uName varchar(50) declare @uAge int declare @uEmail varchar(50) fetch next from Mycursor into @uName,@uAge,@uEmail if (@@fetch_status=0) begin print @uName print @uAge print @uEmail end close Mycursor
3. 觸發器 trigger
觸發器是資料庫伺服器中發生事件時自動執行的一種特殊存儲過程。
DML觸發器:如果用戶要通過數據操作語言 (DML) 事件編輯數據,則執行 DML 觸發器。
表或視圖的 insert, delete, update語句(不支持select)。
DDL觸發器:DDL 觸發器用於響應各種數據定義語言 (DDL) 事件。
這些事件主要對應於 Transact-SQL Create、Alter 和 Drop 語句,以及執行類似 DDL 操作的某些系統存儲過程。
登錄觸發器: 登錄觸發器在遇到 Login 事件時觸發,該事件是在建立用戶會話時引發的。
創建觸發器:
create trigger trg_In ON tbUsers after delete as begin insert into tbUsers_backup(Name,Age,Email) select Name,Age,Email from deleted end