SQL Server 觸發器、事務、以及存儲過程詳解


觸發器(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM