觸發器(trigger)
在使用觸發器的同時一般會牽扯到兩張表,這兩張表只讀且是虛擬的表一個是inserted(增加表)另外一個是deleted(刪除表)
這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完工后,這兩張表就會被刪除inseted是存插入和修改的數據,deleted則是存儲
刪除的的數據
語法: create trigger tgr_name(觸發器名稱)
on table_name(表名)
with encrypion --加密觸發器
for update(insert、delete等)
as
Transact-SQL( 一些SQL語句、類似於下面這這串代碼)
--定義變量 declare @password varchar(20),@UserName varchar(20), @temp int,@birthday datetime; --在 inserted(虛擬表)表中查詢已經插入的記錄信息 select @password=password,@UserName=UserName,@birthday=Birthday,@temp=Gender from inserted; -- set @UserName=@UserName+CONVERT(varchar,@password); --set @temp=@password/2; insert into SYS_Users(UserName,Password,Gender,Birthday) values(@UserName,@password,@temp,@birthday); --打印信息提示成功 print '添加用戶成功'
刪除觸發器T-SQL語句備份解析
例子: SYS_Users 表名 .'U'指類型表
as print '備份數據庫中.......'; if(OBJECT_ID('SYS_Users','U')is not null) --存在SYS_Users 表,直接插入數據 insert into SYS_Users select UserName,[Password],Gender,Birthday,CreateDate,IsDelete from deleted else --不存在classesBackup創建再插入 select * into SYS_Users1 from deleted; print '備份數據成功!';
insert into SYS_Users select UserName,[Password],Gender,Birthday,CreateDate,IsDelete from deleted
上面這串代碼表示在 SYS_Users 插入 deleted 的信息,也就是刪除的的數據從而達到了備份的效果
select * into SYS_Users1 from deleted;
上面這串語句表示 創建一張和deleted數據結構相同的新表,表的名稱為 SYS_Users1,並且將deleted里面的數據添加到 SYS_User1表中
事務(tran)
BEGIN TRAN Tran_Money(事務名稱)
declare @tran_error int;
set @tran_error=0
BEGIN TRY
Update SYS_User Set Money+=30 WHERE UserName='小明'
set @tran_error+=@@ERROR
Update SYS_User Set Money-=30 WHERE UserName='小芳'
set @tran_error+=@@ERROR
END TRY
BEGIN CATCH
Print '出現異常,自動回滾:'+convert(vachar,error_number())+'錯誤消息'+error_message()
SET @tran_error = @tran_error + 1
END CATCH
if(@tran_error>0)
BEGIN
ROLLBACK TRAN;、(回滾事務)
PRINT '轉賬失敗'
END
ELSE
BEGIN
COMMIT tran ; (提交事務)
PRINT '轉賬成功'
END