我有一个连接到的服务器 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用户的密码过期:)
INSERT INTO [TargetServer].[TestDatabase].[dbo].TestTable (Name)
SELECT Name From [SourceServer].[SourceDatabase].[dbo].[Names] where Id = 1
对于使用 openquery 的用户,操作方法如下:
INSERT INTO OPENQUERY ([LINKEDSERVERNAME], 'SELECT idjob, salarylocal, salarydollars, calification FROM employee')
SELECT 1, 666, 668, 10
如果目标表架构已存在于目标中,请使用以下代码
INSERT INTO [TargetLinkedServerName].[TestDatabase].[dbo].[TargetTestTable]
SELECT * From [SourceLinkedServerName].[SourceDatabase].[dbo].[SourceTestTable]
如果目标表架构已不存在于目标中,请使用以下代码(此代码将在目标中创建新表,就像源表一样)
select * into [TargetLinkedServerName].[TestDatabase].[dbo].[TargetTestTable]
From [SourceLinkedServerName].[SourceDatabase].[dbo].[SourceTestTable]
select * into [TargetServer].[TestDatabase].[dbo].TestTable
From [SourceServer].[SourceDatabase].[dbo].[Names]
如果您想通过链接服务器插入数据,则该表需要存在
--step 1 on TargetLinkedServerName:
create table [TestDatabase].[dbo].[TargetTestTable]
--step 2 on SourceLinkedServerName:
INSERT INTO [TargetLinkedServerName].[TestDatabase].[dbo].[TargetTestTable]
SELECT * From [SourceDatabase].[dbo].[SourceTestTable]
我最近也遇到了同样的问题。 我使用下面的方法找到了解决方案,即将搜索结果存储到临时表中,然后只将该临时表插入到链接服务器表中。
选择@HelloWorld = 名称 进入#TempDBA 来自 dbo.Names,其中 Id = 1
插入 [TargetServer].[TestDatabase].dbo.TestTable(名称) 从 #TempDBA 中选择*
希望对你有帮助(虽然已经过去很多年了...)