插入链接服务器时出错

Dan*_* Wu 12 sql-server insert linked-server

我想在本地服务器上插入一些数据到远程服务器,并使用以下sql:

select * into linkservername.mydbname.dbo.test from localdbname.dbo.test
Run Code Online (Sandbox Code Playgroud)

但它会引发以下错误

对象名称"linkservername.mydbname.dbo.test"包含的前缀数量超过最大数量.最大值为2.

我怎样才能做到这一点?

ric*_*aux 15

我不认为使用该INTO子句创建的新表支持4个部分名称.您需要先创建表,然后使用INSERT..SELECT它来填充它.

(参见MSDN上的参数部分中的注释:参考)


2To*_*oad 11

SELECT...INTO [new_table_name]语句最多支持2个前缀:[database].[schema].[table]

注意:使用以下方法将数据拉过链接更为高效:使用以下方法SELECT INTO推送数据INSERT INTO:

  1. SELECT INTO 记录最少.
  2. SELECT INTO 通常不会隐式启动分布式事务.

我通常在第2点说,因为在大多数情况下,使用时不会隐式创建分布式事务SELECT INTO.如果探查器跟踪告诉您SQL Server仍在隐式创建分布式事务,则可以先SELECT INTO使用临时表,以防止隐式分布式事务,然后将数据从临时表移动到目标表中.

推送与拉动示例
在此示例中,我们通过链接将数据从[server_a]复制到[server_b].此示例假定可以从两个服务器执行查询:

推送
而不是连接到[server_a]并将数据推送到[server_b]:

INSERT INTO [server_b].[database].[schema].[table]
SELECT * FROM [database].[schema].[table]
Run Code Online (Sandbox Code Playgroud)


连接到[server_b]并从[server_a]中提取数据:

SELECT * INTO [database].[schema].[table]
FROM [server_a].[database].[schema].[table]
Run Code Online (Sandbox Code Playgroud)