use pubs
godeclare @del_error int,@ins_error int
--開始事務
begin tran
--執行刪除命令
delete authors
where au_id ='409-56-1688'
--捕獲執行完刪除操作後的@@error變數的值
select @del_error = @@error
--執行插入操作
insert authors
values ('409-56-1688','bennet','abraham','416 658-9932','6223 bateman st.','berkeley','ca','94160','1')
--捕獲執行完插入操作後的@@error變數的值
select @ins_error=@@error
--測試捕獲到的@@error值
if @del_error = 0 and @ins_error =0
begin
--成功執行確定事務的操作
print 'the author information has been replaced'
commit tran
endelse
begin
--有錯誤發生,檢查究竟是那個語句有問題
--如何回滾整個事務
if @del_error<>0
print 'an error occurred during execution of the delete statement.'
if @ins_error<>0
print 'an error occurred during execution of the insert statement.'
rollback tran
endgo
這個列子的乙個事務中包含了2個操作,程式在每次資料庫操作後都檢查了@@error全域性變數的值。如果2個操作都正常結束,則確定這個事務。但如果有1個操作出現錯誤,則回滾整個事務,使2個操作都不成功。
這個列子具有很強的代表性,因為類似的問題在資料庫程式設計過程中會經常用到
sql經典語句
說明 複製表 只複製結構,源表名 a 新錶名 b access可用 方法一 select into b from a where 1 1 方法二 select top 0 into b from a 注意 複製的新錶中的所有欄位都將沒有預設值,即使源表中有設預設值 說明 一條sql 語句搞定資料庫分...
經典sql語句
經典sql語句大全 update 有關update,急!在oracle資料庫中 表 a id firstname,lastname 表 b id,lastname 表 a 中原來id,firstname兩個欄位的資料是完整的 表 b中原來id,lastname兩個欄位的資料是完整的 現在要把表 b中...
幾個經典sql
幾個經典的sql語句 1.關於group by的sql語句 表結構 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1992 1 2.1 1992 2 2.2 1992 3 2.3 顯示結果 year m1 m2 m3 1991 1.1 1.2 ...