sql – 无法执行存储过程以插入链接服务器上的表

我在服务器A上有一个表A,它有一组用户数据列.我需要将它插入到服务器B上的表B中.我已经编写了一个存储过程来每晚运行此insert语句(下面的SQL).如果我选择并执行该过程的任何部分,那么它工作正常,但如果我尝试执行整个过程,那么它会给我一个错误:

The object name ServerB.DatabaseB.dbo.TableB has more than the maximum number of prefixes. The
maximum is 2.

T-SQL声明:

IF EXISTS (SELECT * FROM SERVERA.DatabaseA.dbo.TableA)
BEGIN
 TRUNCATE TABLE SERVERB.DatabaseB.dbo.TableB
 INSERT INTO 
    SERVERB.DatabaseB.dbo.TableB
 SELECT 
   Firstname,
   Surname,
   Username
 FROM 
   SERVERA.DatabaseA.dbo.TableA
END 

有没有人有任何想法我做错了什么?

最佳答案 TRUNCATE TABLE命令的语法
as per the manual是:

TRUNCATE TABLE 
    [ { database_name .[ schema_name ] . | schema_name . } ]
    table_name
[ ; ]

如您所见,此命令仅支持由不超过三个组件组成的名称,即您无法使用TRUNCATE TABLE指定链接服务器名称.

一种解决方案可能是使用对sp_executesql的远程调用,如下所示:

EXECUTE SERVERB.DatabaseB.sys.sp_executesql N'TRUNCATE TABLE dbo.TableB';
点赞