sqlserver中建立包含事務的儲存過程

2021-09-08 19:39:55 字數 3068 閱讀 4476

什麼是事務

事務時包含1條或多條語句的邏輯單元。事務中的語句是乙個整體,要麼一起提交,要麼一起撤銷。事務在提交前可以回滾,一旦提交就不能撤銷修改了,是永久性的修改。

為什麼使用事務

可以例舉生活中的例子,比如銀行轉賬:a向b轉100萬。程式的執行順序:1.a賬戶減掉100萬 2.b賬戶增加100萬。若是都成功執行倒沒什麼,假設1成功執行,2執行失敗,就會出問題。運用事務就不會出現這種問題,因為只要其中有一步操作失敗,事務就會回滾,之前的所有操作將會被撤銷。

事務的基本控制語句

1.begin transaction:事務開始

2.commit transaction:事務提交

3.rollback transaction:事務回滾

事務的特性(acid)

1.atomic(原子性):事務中程式是資料庫的邏輯工作單元,對資料的修改要麼全執行,要麼全不執行。

2.consistent(一致性):事務執行前後資料一致,事務完成之後資料的修改才可見。

3.isolated(隔離性):併發事務之間不能相互干擾

4.durable(永續性):事務一旦提交就是對資料的永久修改。

下面是乙個包含事務的儲存過程的例子:

1 alter proc [dbo].[proc_insertstudent]

2 @stuname nvarchar(50),@stuclassid int,@stuage int

3 as

4 begin

5 set nocount on --on表示不返回計數

6 set xact_abort on --當執行事務時,如果出錯,會將transcation設定為uncommittable狀態

7 8 begin try

9 declare @stucountbyname int;

10 select @stucountbyname=count(*) from students where name=@stuname;

11 12 if(isnull(@stuname,'')='')

13 begin

14 print('名字不能為空');

15 return;

16 end

17 18 if(@stucountbyname>0)

19 begin

20 print('名字重複');

21 return

22 end

23 24 begin tran --開啟事務

25 insert into students(name,classid,age) values(@stuname,@stuclassid,@stuage)

26 commit tran --提交事務

27 28 end try

29 30 begin catch

31 if xact_state()=-1

32 rollback tran; --回滾事務

33 select error_number() as errornumber;

34 select error_message() as errormsg;

35 end catch

36 set xact_abort off;

37 end

其中students表:

1 create table [dbo].[students](

2 [id] [int] identity(1,1) not null primary key,

3 [name] [nvarchar](50) not null,

4 [classid] [int] not null,

5 [age] [int] not null,

6 [createtime] [datetime] not null

7 );

1 alter proc [dbo].[proc_insertstudent]

2 @stuname nvarchar(50),@stuclassid int,@stuage int

3 as

4 begin

5 set nocount on --on表示不返回計數

6 set xact_abort on --當執行事務時,如果出錯,會將transcation設定為uncommittable狀態

7 8 begin try

9 declare @stucountbyname int;

10 select @stucountbyname=count(*) from students where name=@stuname;

11 12 if(isnull(@stuname,'')='')

13 begin

14 print('名字不能為空');

15 return;

16 end

17 18 if(@stucountbyname>0)

19 begin

20 print('名字重複');

21 return

22 end

23 24 begin tran --開啟事務

25 insert into students(name,classid,age) values(@stuname,@stuclassid,@stuage)

26 commit tran --提交事務

27 28 end try

29 30 begin catch

31 if xact_state()=-1

32 rollback tran; --回滾事務

33 select error_number() as errornumber;

34 select error_message() as errormsg;

35 end catch

36 set xact_abort off;

37 end

SQL Server 中建立索引

索引的概念 建立索引的目的 提高了資料庫系統的效能,加快資料的查詢速度與減少系統的響應時間。索引是什麼 資料庫中的索引類似於一本書的目錄,在一本書中通過目錄可以快速找到你想要的資訊,而不需要讀完全書。在資料庫中,資料庫程式使用索引可以快速查詢到表中的資料,而不必掃瞄整個表。書中的目錄是乙個字詞以及各...

在SQLSERVER中建立DBLINK

配置sqlserver資料庫的dblink exec sp addlinkedserver server was sms srvproduct provider sqloledb datasrc 10.131.20.100 exec sp addlinkedsrvlogin was sms fals...

SqlServer中建立Oracle連線伺服器

第一種 介面操作 1 展開伺服器物件 鏈結伺服器 右擊 新建鏈結伺服器 輸入鏈結伺服器的 鏈結成功後 第二種 語句操作 注 需要提前安裝 oracle 客戶端程式,重啟機器。如果沒有 oracle 客戶端程式,提示 未找到 oracle 客戶端和網路元件 exec sp addlinkedserve...