Я работаю с некоторыми коммерческими схемами, которые имеют набор похожих таблиц, которые отличаются только по имени языка, например:
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'
Мой вопрос заключается в том, как SQL Server обрабатывает синонимы, когда онприходит к параллельному доступу?Я опасаюсь, что процедура может начаться, потом придет секунда и поменяет таблицу, на которую синоним указывает на половину, вызывая серьезные проблемы.Я мог бы обернуть все в BEGIN TRAN
и COMMIT TRAN
, что теоретически должно исключить риск изменения синонимом двух процессов, однако документации по этому вопросу недостаточно, и я не могу получить окончательный ответ.
ПростоСледует отметить, что, хотя эта система работает одновременно, она не отличается большим трафиком, поэтому снижение производительности при использовании синонимов / транзакций здесь не является проблемой.
Спасибо за любые предложения.