求一跨数据库查询的存储过程
有俩个数据库a,b。其中a数据库中有两张表cities和mapper_Cities,数据如下:
cities:
=============
citycode cityname_en updatedate
1CHI Chittaurgarh 2009-10-5 10:32:07
1MON Aachen DE 2010-10-5 10:32:07
1NEW Aalter 2011-10-5 10:32:07
STA San Fernando 2012-10-5 10:32:07
mapper_Cities:
================
Code Name
1BAD Beijing
1CHI ShangHai
1NEW GuangZhou
数据库b中有一张表gta_city,数据如下:
gta_city:
================
cityCode cityName downloadDate
AORE Santo-Aore Island 2012-7-24 10:21:39
BJ Beijing 2012-8-24 10:21:39
SH ShangHai 2012-9-24 10:21:39
GZ GuangZhou 2012-10-24 10:21:39
现在要求按照这样的逻辑取出数据并且取出的结果要能进行分页,要传俩个分页参数进去的,一个offset(分页开始行数),pageSize(每页的记录数)。
1,在gta_city表里中取出cityName列的数据与cities表里面的cityName_en列的数据不相等并且gta_city表里面的Updatedate列的时间大于cities表里面的downloadDate列的数据
2,在gta_city表里中取出cityCode列的数据不存在于mapper_Cities的Code列的数据
------解决方案--------------------跨库查询简单,只需要在查询的表前面加数据库及架构名即可 例如 数据库名.dbo.表名
分页可以搜通用的存储过程。
------解决方案--------------------两库的字符集不一致
还有表前面是架构名或所有者不是数据库名,如[Server].[DataBase].[Owner].[TableName],如果是同Server,则Server可略
------解决方案--------------------
select *
from (SELECT *
FROM OpenDataSource('sqloledb', 'Data Source= "127.0.0.1 ";User ID=sa;Password=*****') . [ bd1] . [ dbo ] . [ Person ]) A,
(SELECT *
FROM OpenDataSource('sqloledb', 'Data Source= "127.0.0.1 ";User ID=sa;Password=*****')
.db2. [ dbo ] . [ Person1 ]) B
where A.id = B.id
跨库操作不同的表
------解决方案--------------------错误提示的是两数据库的字符集不一致