Как обрезать таблицу через связанный сервер, используя синоним имени таблицы?

Я знаю, что могу сделать следующее:

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

Но что, если я хочу использовать синоним для таблицы?

Я на SERVER1 и хочу обрезать таблицу на SERVER2, используя синоним для имени таблицы.

Это возможно?


person RJ.    schedule 11.02.2013    source источник
comment
можете ли вы изменить отмеченный ответ, так как это просто ссылка, которая больше не работает, поэтому там нет ценной информации.   -  person Tanner    schedule 27.09.2017


Ответы (2)


Ссылка на правильный ответ не работает. Я столкнулся с похожей проблемой. Мой обходной путь заключался в том, чтобы использовать таблицу синонимов для поиска имени базовой таблицы, а затем запускать динамический оператор sql. Задокументировано, что синонимы нельзя использовать с TRUNCATE, но, по крайней мере, это достойный обходной путь.

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
person Jason W    schedule 15.11.2016

Создайте хранимую процедуру в базе данных Server2 для усеченных таблиц, затем вызовите хранимую процедуру с сервера Server1.

Как это :-

EXEC [Сервер2].[ИмяБД].[ИмяСхемы].sp_TruncateTable;

person Bhaskar Banerjee    schedule 09.11.2016