2011-07-19 54 views
0

我需要在原始sproc中進行以下步驟序列。下面是一個簡化的近似例如:製作SQL語句的序列原子

Customesrs表(客戶ID,...,OrderMax)
產品表(產品編號,...)
AvailableProducts查看(產品編號和其他屬性)
訂單(客戶ID,的OrderId)

  1. 選擇Customers表@OrderMax
  2. 選擇TOP @Ordermax從AvailableProducts查看
  3. 更新一些prope在產品rties基於所述結果集步驟2
  4. 插入訂單到訂單表(基於該結果設定步驟2的)
  5. 返回/該插入

據我所知選擇的訂單,整個事情和UPDLOCK必須有一個交易。需要保證的是產品表的更新和訂單表的插入。但是,從這兩個表構建的視圖中查詢行。

什麼是正確的方式使這個序列原子和安全更新和插入上述表?

+3

你的問題是什麼? – JNK

+0

你自己的答案哪一部分你不明白?而且你不太可能需要使用非標準的鎖類型,所以UPDLOCK可能會被忽略。 – dkretz

回答

1

需要在Begin Transaction,Commit Transaction中包裝所有的邏輯。更新/插入並不關心數據是否來自聯接,除非它以某種方式創建了無法回滾事務的情況,但它必須變得非常混亂才能創建這樣的情況。如果3.和4.具有複雜的邏輯,您可能會被迫進入遊標或.NET(但您可以使用常規查詢來執行一些非常複雜的邏輯)。

+0

+ sp_getapplock完成了這項工作。 – kateroh