Je travaille avec des schémas commerciaux, qui ont aa ensemble de tables similaires, qui ne diffèrent que par le nom de la langue, par exemple:SQL Server Synonymes et Concurrency sécurité avec des noms de table dynamiques
Products_en
Products_fr
Products_de
J'ai aussi plusieurs procédures stockées que je me sers pour y accéder pour exécuter certaines fonctions administratives, et je l'ai choisi d'utiliser des synonymes car il y a beaucoup de code et d'écrire tout comme SQL dynamique est juste douloureux:
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'
Ma question est de savoir comment SQL Server traite les synonymes quand il s'agit de con accès actuel? Ma crainte est qu'une procédure puisse commencer, puis une seconde venir et changer la table que le synonyme pointe à mi-chemin en causant des problèmes majeurs. Je pourrais tout emballer dans un BEGIN TRAN
et COMMIT TRAN
qui devrait théoriquement enlever le risque de deux processus changeant un synonyme, cependant la documentation est rare sur cette matière et je ne peux pas obtenir une réponse définitive. Il est à noter que, bien que ce système soit concurrentiel, il ne génère pas beaucoup de trafic, ce qui fait que les performances de l'utilisation de synonymes/transactions ne sont pas vraiment un problème ici.
Merci pour vos suggestions.
Qu'entendez-vous par «schémas commerciaux»? Cela signifie-t-il que vous ne pouvez pas modifier le schéma de base de données lui-même (c'est-à-dire que vous ne pouvez que l'ajouter)? –
Ils font partie d'un produit commercial (Microsoft Commerce Server), donc oui je peux ajouter à eux, mais je ne peux pas changer les conventions ou d'autres choses sur lesquelles l'API compterait – amarsuperstar