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

Meh*_*ali 6 t-sql sql-server oracle linked-server openquery

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

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

我尝试了很多查询,但没有一个能按我想要的方式工作。

我使用的下面的查询有效,但仅适用于静态值,但我想从本地数据库上的表动态插入数据。

INSERT OPENQUERY (ORTEST, 'SELECT * FROM reservation')
VALUES (2, '2', 3);
Run Code Online (Sandbox Code Playgroud)

Ste*_*ane 6

它不能与 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Gen*_*ari 0

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

INSERT INTO ORTEST.[dbname].[dbo].[reservation]
SELECT * from [dbname].[db].[reservation]
Run Code Online (Sandbox Code Playgroud)