2013-02-11 6 views
2

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

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

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

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

Возможно ли это?

+0

Вы можете изменить отмеченный ответ, поскольку это просто ссылка, которая больше не работает, поэтому там нет никакой важной информации. – Tanner

ответ

1

В соответствии с this blog post вы не можете, но он обеспечивает работу.

+0

Какова была работа? –

+0

Ссылка мертвой –

+0

мертвая ссылка ... еще! – Tanner

0

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

Как это: -

EXEC [Сервер2] [DBName] [SchemaName] .sp_TruncateTable;..

1

Ссылка на правильный ответ нарушена. У меня возникла аналогичная проблема. В моем обходном пути использовалась таблица синонимов для поиска базового имени таблицы, а затем запускалось динамическое выражение 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