我知道我可以做到以下几点:
EXEC Server_Name.DBName.sys.sp_executesql N'TRUNCATE TABLE dbo.table_name'
但是如果我想为表使用同义词怎么办?
我在 SERVER1 上,我想使用表名的同义词截断 SERVER2 上的表。
这可能吗?
我知道我可以做到以下几点:
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 调用该存储过程。
像这样 :-
执行 [Server2].[DBName].[SchemaName].sp_TruncateTable;