我正在使用SQL Server Express,我为Oracle数据库创建了一个链接服务器。
如标题所示,我想将从本地表中选择的数据插入到链接服务器的表中。
我尝试了很多查询,但没有一个能按我的意愿工作。
下面我使用的这个查询有效,但只有静态值,但我想从本地数据库的表中动态插入数据。
INSERT OPENQUERY (ORTEST, 'SELECT * FROM reservation')
VALUES (2, '2', 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/
答案 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]