我与一些商业模式,具有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