使用 TRY/CATCH 語句解決 SQL Server 2005 死結

來源:互聯網
上載者:User

  本文樣本原始碼或素材下載

  對於今天的 RDBMS 體繫結構而言,死結難以避免 — 在高容量的 OLTP 環境中更是極為普遍。正是由於 .NET 的公用語言運行庫 (CLR) 的出現,SQL Server 2005 才得以為開發人員提供一種新的錯誤處理方法。在本月專欄中,Ron Talmage 為您介紹如何使用 TRY/CATCH 語句來解決一個死結問題。

一個樣本死結

  讓我們從這樣一個樣本開始說起,它在 SQL Server 2000 和 2005 中都能引起死結。在本文中,我使用 SQL Server 2005 的最新 CTP(社區技術預覽,Community Technology Preview)版本,SQL Server 2005 Beta 2(7 月發布)也同樣適用。如果您沒有 Beta 2 或最新的 CTP 版本,請下載 SQL Server 2005 Express 的最新版本,用它來進行實驗。

  可能發生的死結情況有很多,但最有趣、最微妙的是那些關於閱讀器和編寫器互相阻塞的死結。以下代碼在 pubs 資料庫中就產生了這樣一個死結。(您可以在 SQL Server 2000 的兩個 Query Analyzer 視窗中或 SQL Server 2005 的兩個 Management Studio queries 中並列運行這段代碼。)在其中一個視窗中的代碼本文前面添加下列語句:

-- Window 1 header
DECLARE @au_id varchar(11), @au_lname varchar(40)
SELECT @au_id = '111-11-1111', @au_lname = 'test1'

  在第二個視窗中添加下列語句,進行第二次串連:

-- Window 2 header
DECLARE @au_id varchar(11), @au_lname varchar(40)
SELECT @au_id = '111-11-1112', @au_lname = 'test2'

  在兩個視窗中都使用下列語句作為代碼本文:

-- Body for both connections:
BEGIN TRANSACTION
INSERT Authors VALUES
 (@au_id, @au_lname, '', '', '', '', '', '11111', 0)
WAITFOR DELAY '00:00:05'
SELECT *
 FROM authors
 WHERE au_lname LIKE 'Test%'
COMMIT

  在第三個視窗中運行下列語句,確保 authors 表格中沒有任何包含以下 id 的資料:



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.