4

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

对象名称 ServerB.DatabaseB.dbo.TableB 具有超过最大前缀数。最大值为 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 

有谁知道我做错了什么?

4

1 回答 1

2

根据手册TRUNCATE TABLE,命令的语法是这样的:

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';
于 2012-12-04T18:22:41.267 回答