如何使用表名的同义词通过链接服务器截断表



我知道我可以做以下事情:

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

但是,如果我想使用表的同义词呢?

我在SERVER1上,我想使用表名的同义词截断SERVER2上的一个表。

这可能吗?

我的解决方法是使用同义词表查找底层表名,然后运行动态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

在Server2数据库中为截断表创建存储过程,然后从Server1调用存储过程。

像这样:

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

相关内容

  • 没有找到相关文章

最新更新