【问题标题】:How to insert a row into a linked server table?如何在链接服务器表中插入一行?
【发布时间】:2012-06-22 08:45:25
【问题描述】:

我有一个服务器 SourceServer 我连接到它有一个链接服务器 TargetServer。

插入语句应该是什么样子(我需要引用链接服务器、数据库、命名空间、表):

//Connected to [SourceServer]

USE [SourceDatabase]

DECLARE @HelloWorld NVARCHAR(255)

SELECT @HelloWorld = Name From dbo.Names where Id = 1

INSERT INTO [TargetServer].[TestDatabase].dbo.TestTable (Name)   VALUES (@HelloWorld)

此语句执行时出现异常:

Too many prefixes.

更新:上面的语法工作正常,问题是用于连接到链接服务器的 sql 用户的密码过期:)

【问题讨论】:

  • 您确定您的表或模式名称没有'.'在里面?如果是这样,您将需要再次使用 []。
  • 没有语法错误,请检查 TargetServer 的值
  • 名称在我的真实查询中完全没问题,在这里完全是假的,我明确地构建了一个查询,以便插入语句有更少的地方可能导致异常。

标签: sql-server insert linked-server


【解决方案1】:
INSERT INTO [TargetServer].[TestDatabase].[dbo].TestTable (Name)
SELECT Name From [SourceServer].[SourceDatabase].[dbo].[Names] where Id = 1

【讨论】:

  • 你不需要重写一个假的 sql 查询。您的回答是否意味着 [TargetServer].[TestDatabase].[dbo].TestTable 是可以接受的?为什么我会收到太多前缀异常?
  • 看view语句至少语法应该没问题,嗯。
【解决方案2】:
select * into [TargetServer].[TestDatabase].[dbo].TestTable
 From [SourceServer].[SourceDatabase].[dbo].[Names]

【讨论】:

  • 问题是关于插入
  • 对象名称“[TargetServer].[TestDatabase].[dbo].TestTable”包含超过最大前缀数的错误。最大值为 2。插入而不是选择 * 不会出错....但是 obvs 会添加到现有表的行中,因此酌情截断/删除。
【解决方案3】:

如果 Target 中已经存在目标表架构,请使用以下代码

INSERT INTO [TargetLinkedServerName].[TestDatabase].[dbo].[TargetTestTable] 
SELECT * From [SourceLinkedServerName].[SourceDatabase].[dbo].[SourceTestTable]

如果 Target 中还没有目标表架构,请使用下面的代码(此代码将在 Target 中创建新表,就像源表一样)

select * into [TargetLinkedServerName].[TestDatabase].[dbo].[TargetTestTable] 
 From [SourceLinkedServerName].[SourceDatabase].[dbo].[SourceTestTable]

【讨论】:

  • 自从这篇文章发表以来,我知道这一点已经很长时间了,但我从未找到答案。 Select into 返回此错误。消息 117,级别 15,状态 1,第 41 行对象名称“TargetLinkedServerName.TestDatabase.dbo.TestTable”包含的前缀数量超过了最大数量。最大值为 2。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
相关资源
最近更新 更多