Server1:
DB Version: 2012
Server IP: 192.168.120.252
Souce Database
Server2:
DB Version: 2012
Server IP: 192.168.120.210
Target Database
在Server2上执行以下语句
exec sp_addlinkedserver 'sqlserver', '', 'SQLOLEDB', '192.168.120.252'exec sp_addlinkedsrvlogin 'sqlserver', 'false',null, 'sa', ''
go
SELECT *
FROM
OPENROWSET('SQLOLEDB',
'server=192.168.120.252uid=sapwd=XXXXX', --字符串
DBName.dbo.TableName) --直接写表的名称
方法一: 使用linked_server_name.catalog.schema.object_name,例如:select * from ERP..CRM.INQ
linked_server_name Linked server referencing the OLE DB data source
catalog Catalog in the OLE DB data source that contains the object
schema Schema in the catalog that contains the object
object_name Data object in the schema
SQL Server用linked_server_name取linked server相关配置信息,然后将catalog、schema、object_name作为参数传递给OLEDB。例如远程链接服务器为SQL Server时catalog为数据库实例名,schema为owner id (dbo);链接服务器为Oracle时 (OLEDB),catalog为空,schema为用户
注意点:
a). 远程链接服务器为Oracle时schema、object_name必须大写(其他类型的不清楚),否则会报错
消息 7314,级别 16,状态 1,第 1 行
链接服务器 "ERP" 的 OLE DB 访问接口 "MSDAORA" 不包含表 ""CRM"."INQ""。该表不存在,或者当前用户没有访问该表的权限。
b). 必须使用完整的名称。例如SQL Server本地执行sql,dbo可以省略不写,使用远程链接服务器时则必须提供
方法二:使用openquery,例如:
select *
from openquery(ERP,'select t.* from(select inq.*,rownum as rindex from inq order by img01) t where t.rindex>=51 and t.rindex<=100')
优点:
a). SQL Server只是将openquery中的sql发送给远程服务器执行,因此可以使用远程链接服务器的所有sql语法(例如Oracle语法),sql对象也不必大写
b). 数据类型的异常很少(个别情况下还是会发生)
c). openquery的写法同样可用于update、insert、delete
d). 链接服务器为Oracle时,schema不必出现在sql语句中
关于使用链接服务器方面的一些限制、前提条件,可以参考External Data and Tra
需要变通一下,希望对你有帮助!--sql-开始--------------
declare @row_limit int
set @row_limit=10
declare @sql NVARCHAR(1000)
set @sql='SELECT top '+cast(@row_limit as NVARCHAR(20))
+' [StoreID],[OrderNumber],[ShipmentID] '
+' FROM [192.168.1.254].[YY_Integration].[dbo].[Shipments] with(nolock) '
+' where storeid in (5,9) and [PrintedOn]>''2010-09-01'''
exec SP_EXECUTESQL @sql
--sql-结束--------------
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)