我與一些商業模式,具有AA一套類似的表,不同之處僅在語言名稱,如工作:SQL Server的同義詞和併發安全性動態表名
Products_en
Products_fr
Products_de
我也有幾個存儲過程這我使用訪問這些執行一些管理功能,我已經選擇使用同義詞,因爲有大量的代碼,並把每件事寫動態SQL僅僅是痛苦的:
declare @lang varchar(50) = 'en'
if object_id('dbo.ProductsTable', 'sn') is not null drop synonym dbo.ProductsTable
exec('create synonym dbo.ProductsTable for dbo.Products_' + @lang)
/* Call the synonym table */
select top 10 * from dbo.ProductsTable
update ProductsTable set a = 'b'
我的問題是如何做當談到con時,SQL Server會處理同義詞目前的訪問?我擔心程序可能會開始,然後第二次出現,並通過引發重大問題將同義詞表中的表格更改爲中途。我可以將所有內容都包裹在BEGIN TRAN
和COMMIT TRAN
之間,理論上這應該消除兩個進程更改同義詞的風險,但文檔在這個問題上很少,我無法得到明確的答案。
要注意的是,雖然這個系統是併發的,但它不是高流量,所以使用同義詞/事務的性能命中率在這裏並不是真正的問題。
感謝您的任何建議。
你是什麼意思的「商業模式」?這是否意味着您不能修改數據庫模式本身(即只添加到它)? – 2010-11-12 14:30:31
他們是商業產品(微軟商業服務器)的一部分,所以是我可以添加到他們,但我不能改變API將依賴的約定或其他東西 – amarsuperstar 2010-11-15 15:24:46