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

求一跨数据库查询的存储过程
有俩个数据库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



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