熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server的怪辟:異常與孤立事務[1]

2013-11-15 14:48:59  來源: SQL Server 

  首先從SQLServer中Error講起SQL中錯誤處理有些怪辟 錯誤級別同是但結果都不同

以下是引用片段
select * from 一個不在的表
  if @@error<>
    print 這個沒有輸出
  go

  raiserror()
  if @@error<>
    print 這個輸出了
  go

  exec(select * from 一個不在的表)
  if @@error<>
    print 這個輸出了
  go

  exec sp_executesql Nselect * from 一個不在的表
  if @@error<>
    print 這個輸出了

  這樣你可以發現通過exec或sp_executesql執行可疑的sql這樣就可以在後面捕捉到被異常終止的錯誤

  引出孤立事務

  孤立事務的產生

以下是引用片段
select @@trancount 當前連接的活動事務數 當前連接的活動事務數為

    begin tran

    select * from 一個不在的表
    if @@error<>
    begin
      print 沒有執行到這裡來!
      if @@trancount<> rollback tran
    end

    commit tran

  select @@trancount 當前連接的活動事務數 執行後你看看 當前連接的活動事務數為且重復執行會每次累加這是很耗資源的

  應為rollback根本就沒有被回滾

  使用現有手段解決孤立事務

以下是引用片段
print @@trancount print 當前連接的活動事務數 當前連接的活動事務數為

    if @@trancount<> rollback tran 在這裡寫可以讓孤立事務只保持到下次你的過程被調用
    begin tran

    select * from 一個不在的表
    if @@error<>
    begin
      print 沒有執行到這裡來!
      if @@trancount<> rollback tran
    end

    commit tran

  執行後你看看 當前連接的活動事務數為但重復執行不會累加

  print @@trancount print 當前連接的活動事務數

[]  []  


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22370.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.