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

时间:2012-12-04 16:42:59

标签: sql sql-server-2008

我在服务器A上有一个表A,它有一组用户数据列。我需要将它插入到服务器B上的表B中。我已经编写了一个存储过程来每晚运行此insert语句(下面的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 

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

1 个答案:

答案 0 :(得分:2)

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';