使用本地表中的数据插入到链接服务器上的表中

时间:2016-01-07 13:59:33

标签: sql-server oracle tsql linked-server openquery

我正在使用SQL Server Express,我为Oracle数据库创建了一个链接服务器。

如标题所示,我想将从本地表中选择的数据插入到链接服务器的表中。

我尝试了很多查询,但没有一个能按我的意愿工作。

下面我使用的这个查询有效,但只有静态值,但我想从本地数据库的表中动态插入数据。

INSERT OPENQUERY (ORTEST, 'SELECT * FROM reservation')
VALUES (2, '2', 3);

3 个答案:

答案 0 :(得分:2)

正常情况下,它不适用于openquery。要写入远程表,必须在服务器级别设置链接服务器。这适用于oracle,除非您使用的SQL版本过旧。 这是在服务器端设置链接服务器的方法:

exec master.dbo.sp_MSset_oledb_prop 'ORAOLEDB.Oracle', N'AllowInProcess', 1
go
exec sp_addlinkedserver @server = 'MyOracleServer', @srvproduct = 'Oracle', @provider = 'OraOLEDB.Oracle', @datasrc = 'MyOracleLinkedServer'
go
exec master.dbo.sp_serveroption @server=N'MyOracleServer', @optname=N'rpc out', @optvalue=N'true'
go
sp_addlinkedsrvlogin @rmtsrvname = N'MyOracleServer', @useself = 'false', @locallogin = NULL, @rmtuser = 'myRemoteUser', @rmtpassword ='myRemotePassword'
go

然后您可以进行常规查询:

insert into [MyOracleServer]..[MyRemoteSchema].[MyRemoteTable](
  [MyRemoteField1],
  [MyRemoteField2]
)
select 
  t.Field1,
  t.Field2
from
  [dbo].[MyLocalTable] as t

如果您想了解更多详细信息,请点击以下两个链接: https://www.mssqltips.com/sqlservertip/4396/creating-a-sql-server-2014-linked-server-for-an-oracle-11g-database/

https://www.mssqltips.com/sqlservertip/4414/transferring-data-between-sql-server-2014-and-oracle-11g-databases/

答案 1 :(得分:1)

正确的语法

INSERT OPENQUERY(sql_server, 'SELECT a1,a2,a3 FROM database.schema.table_a') (a1, a2, a3)
SELECT b1, b2, b3 FROM database.schema.table_b;

答案 2 :(得分:0)

您应该能够使用链接服务器名称作为限定表名的一部分,然后只需在select中执行正常插入:

INSERT INTO ORTEST.[dbname].[dbo].[reservation]
SELECT * from [dbname].[db].[reservation]