我知道我可以做以下事情:
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;