我在服务器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';