如何向链接服务器表中插入一行?

问题描述 投票:0回答:6

我有一个连接到的服务器 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用户的密码过期:)

sql-server insert linked-server
6个回答
22
投票
INSERT INTO [TargetServer].[TestDatabase].[dbo].TestTable (Name)
SELECT Name From [SourceServer].[SourceDatabase].[dbo].[Names] where Id = 1

2
投票

对于使用 openquery 的用户,操作方法如下:

INSERT INTO OPENQUERY ([LINKEDSERVERNAME], 'SELECT idjob, salarylocal, salarydollars, calification FROM employee')
SELECT 1, 666, 668, 10

1
投票

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

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

如果目标表架构已不存在于目标中,请使用以下代码(此代码将在目标中创建新表,就像源表一样)

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

0
投票
select * into [TargetServer].[TestDatabase].[dbo].TestTable
 From [SourceServer].[SourceDatabase].[dbo].[Names]

0
投票

如果您想通过链接服务器插入数据,则该表需要存在

--step 1 on TargetLinkedServerName: 

create table [TestDatabase].[dbo].[TargetTestTable]

--step 2 on SourceLinkedServerName:

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

0
投票

我最近也遇到了同样的问题。 我使用下面的方法找到了解决方案,即将搜索结果存储到临时表中,然后只将该临时表插入到链接服务器表中。

选择@HelloWorld = 名称 进入#TempDBA 来自 dbo.Names,其中 Id = 1

插入 [TargetServer].[TestDatabase].dbo.TestTable(名称) 从 #TempDBA 中选择*

希望对你有帮助(虽然已经过去很多年了...)

© www.soinside.com 2019 - 2024. All rights reserved.