我在服务器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
有没有人有任何想法我做错了什么?
答案 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';