当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的DBLINK,通过DBLINK本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
一、 创建DBLINK(我们这里已图文的形式展现简单点)
1、登录要链接的数据库
2、点击 服务对象-》链接服务器然后左击
3、点击现键链接服务器
4、根据需求设置被链接服务器地址(一般情况下是IP地址)、选择SQL SERVER 然后点击安全性
5、选择此安全上下文链接 并输入被链接服务器的 数据库账号与密码点击确定即可。
6、设置好后刷新就可以看见我们新建立的接口了。
前面的定义已经说明,通过DBLINK本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
二、示范查询
以本地Customers表和远程数据库访问接口里的SQL_Road数据库下的 ook表
SELECT * FROM Customers c
JOIN [远程数据库地址].SQL_Road.dbo.Orders o
ON c.客户ID=o.客户ID
三、代码创建DBLINK链接
EXEC master.dbo.sp_addlinkedserver
@server = '远程数据库地址',
@srvproduct='SQL Server'
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname='远程数据库地址',
@useself='False',
@locallogin=NULL,
@rmtuser='账号',
@rmtpassword='密码' Go
四、我写的k3在云星空查询的案例
select
k3.FNumber as 客户代码 ,
SUM(k.FEndBalance) 余额
from(
select r.FAccountID,r.FDetailID,SUM(FEndBalance) as FEndBalance
from (
select u1.FAccountID,u1.FDetailID,u1.FEndBalance*t1.FDC as FEndBalance
from [SQL].AIS.dbo.t_Balance u1
inner join [SQL].AIS2.dbo. t_Account t1 on u1.FAccountID=t1.FAccountID
where u1.FAccountID in
(select a.FAccountID from [SQL].AIS2.dbo.t_Account a inner join [SQL].AIS2.dbo.t_ItemDetail b on a.FDetailID=b.FDetailID and b.F1<>0)
and FYear=(select FValue from [SQL].AIS.dbo.t_SystemProfile where Fkey='CurrentYear' and FCategory='GL') and FPeriod=(select FValue from [SQLA].AIS.dbo.t_SystemProfile where Fkey='CurrentPeriod'
and FCategory='GL') and u1.FCurrencyID=0 and u1.FDetailID<>0
union all
select t1.FAccountID,t1.FDetailID,(CASE WHEN t1.FDC=1 THEN 1 ELSE -1 END)*FAmount*t2.FDC as FEndBalance from [SQLAG].AIS.dbo.t_Voucher u1
inner join [SQL].AI.dbo.t_VoucherEntry t1 on u1.FVoucherID=t1.FVoucherID
inner join [SQL].AIS.dbo. t_Account t2 on t2.FAccountID=t1.FAccountID
where t1.FAccountID in (select a.FAccountID from [SQL].AIS20080326210553.dbo.t_Account a inner join [SQL].AIS.dbo. t_ItemDetail b on a.FDetailID=b.FDetailID and b.F1<>0)
and u1.FPosted=0) r group by r.FAccountID,r.FDetailID) k
inner join [SQL].AIS.dbo.t_ItemDetail k1 on k1.FDetailID=k.FDetailID
inner join [SQL].AIS.dbo.t_Account k2 on k2.FAccountID=k.FAccountID AND k2.FNumber LIKE '1122.%'
inner join [SQL].AIS.dbo.t_Item k3 on k3.FItemID=k1.F1
WHERE k.FEndBalance<>0 and K3.FNumber in ('01.01',
'01.01.001',
'01.01.009',
'01.01.005',
'01.01.004')
group by k3.FNumber