Comment tronquer une table via un server lié en utilisant un synonyme pour le nom de la table?

Je sais que je peux faire ce qui suit:

EXEC Server_Name.DBName.sys.sp_executesql N'TRUNCATE TABLE dbo.table_name' 

Mais que se passe-t-il si je veux utiliser un synonyme pour la table?

Je suis sur SERVER1 et je veux tronquer une table sur SERVER2 en utilisant un synonyme pour le nom de la table.

Est-ce possible?

Selon ce blog, vous ne pouvez pas, mais il fournit un travail autour.

Le lien sur la bonne réponse est cassé. J'ai rencontré un problème similaire. Ma solution de contournement utilisait la table des synonymes pour searchr le nom de la table sous-jacente, puis exécuter une instruction SQL dynamic. Il est documenté que les synonymes ne peuvent pas être utilisés avec TRUNCATE, mais au less c'est une solution de contournement décente.

 DECLARE @TableName VARCHAR(500) = (SELECT TOP 1 base_object_name FROM Server_Name.DBName.sys.synonyms WHERE name = 'table_name') DECLARE @Sql NVARCHAR(MAX) = 'EXEC Server_Name.DBName.sys.sp_executesql N''TRUNCATE TABLE ' + @TableName + '''' EXEC sys.sp_executesql @Sql 

Créez une procédure stockée dans la database Server2 pour Truncate Tables puis appelez la procédure stockée à partir de Server1.

Comme ça :-

EXEC [Server2]. [DBName]. [SchemaName] .sp_TruncateTable;