日期:2014-05-17  浏览次数:20515 次

求一跨数据库查询的存储过程
有俩个数据库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可略
------解决方案--------------------
SQL code

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

------解决方案--------------------
错误提示的是两数据库的字符集不一致