关于两个数据库之间的查询问题

时间:2022-09-12 07:34:11
现在有两个数据库,内部的表是一样的,一个是2002年的数据,数据不是很全,2003年的数据库数据相对比较全,我想从2003年的数据库中找出2002年数据库中存在的相对应的数据,不知如何写这样的语句!
我写的:
use shanghaishuju2003
select count(*) from shanghaishuju2003.dbo_his_200304_eng where shanghaishuju2003.dbo_his_200304_eng.yh_id 
in(select yh_id from shanghaishuju2002.dbo_his_200204_eng where hanghaishuju2002.dbo_his_200204_eng.yh_id
in (select yh_id from shanghaishuju2002.dbo_information where hanghaishuju2002.dbo_information.hy_code='01')
and  yh_id in (select yh_id from shanghaishuju2002.dbo_t_info where shanghaishuju2002.dbo_t_info.xl_1='35'))
出现错误:
服务器: 消息 208,级别 16,状态 1,行 10
对象名 'shanghaishuju2003.his_200304_eng' 无效。
服务器: 消息 208,级别 16,状态 1,行 10
对象名 'shanghaishuju2002.dbo_his_200204_eng' 无效。
服务器: 消息 208,级别 16,状态 1,行 10
对象名 'shanghaishuju2002.dbo_information' 无效。
服务器: 消息 208,级别 16,状态 1,行 10
对象名 'shanghaishuju2002.dbo_t_info' 无效。
不知何故?谢谢

7 个解决方案

#1


不能直接引用另一个数据库中的数据,只能通过OPENDATASOURCE
语法
OPENDATASOURCE ( provider_name, init_string )

参数
provider_name

注册为用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。

init_string

连接字符串,这些字符串将要传递给目标提供程序的 IDataInitialize 接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:"keyword1=value; keyword2=value."

在 Microsoft® Data Access SDK 中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出 init_string 参数中最常用的关键字。

#2


use shanghaishuju2003
select count(*) from shanghaishuju2003.dbo.dbo_his_200304_eng a where a.yh_id 
in(select b.yh_id from shanghaishuju2002.dbo.dbo_his_200204_eng b where b.yh_id
in (select c.yh_id from shanghaishuju2002.dbo.dbo_information c where c.hy_code='01')
and  a.yh_id in (select d.yh_id from shanghaishuju2002.dbo.dbo_t_info d where d.xl_1='35'))

#3


需要使用 链接服务器,同意  ghosthjt(天煞孤星)

#4


学习

#5


不能用shanghaishuju2003..吗?

use shanghaishuju2003
select count(*) from his_200304_eng where his_200304_eng.yh_id 
in(select yh_id from shanghaishuju2002..his_200204_eng where hanghaishuju2002..his_200204_eng.yh_id
in (select yh_id from shanghaishuju2002..information where hanghaishuju2002..information.hy_code='01')
and  yh_id in (select yh_id from shanghaishuju2002..t_info where shanghaishuju2002..t_info.xl_1='35'))

#6


你的两个库在几台机子上?

#7


访问链接服务器
使用 sp_addlinkedserver 创建链接服务器后,可以使用下列方法访问它: 

分布式查询。通过 SELECT、INSERT、UPDATE 和 DELETE 语句并使用基于链接服务器的名称访问此链接服务器中的表。


远程存储过程。可以使用四部分名称对链接服务器执行存储过程。 
使用 sp_addserver 可将运行 SQL Server 实例的服务器定义为远程服务器。然后就可以在远程存储过程调用中引用该远程服务器。远程服务器组件作为现有应用程序的兼容功能而被保留。

应用程序在移植到 SQL Server 2000 时,在一段时间内可能需要运行一些新代码(针对链接服务器定义使用分布式查询)和一些旧代码(使用远程服务器定义)。链接服务器和远程服务器都使用相同的名称空间,因此链接服务器或远程服务器定义的名称必须与被远程访问的服务器的网络名称不同。使用不同的服务器名称定义一个条目,然后使用 sp_setnetname 将其与远程服务器的网络名称关联起来。



说明  因为系统存储过程可以简明地显示出参数的使用,所以这部分的示例使用系统存储过程配置链接服务器。但是,SQL Server 企业管理器也支持配置链接服务器。有关更多信息,请参见配置链接服务器。 

#1


不能直接引用另一个数据库中的数据,只能通过OPENDATASOURCE
语法
OPENDATASOURCE ( provider_name, init_string )

参数
provider_name

注册为用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。

init_string

连接字符串,这些字符串将要传递给目标提供程序的 IDataInitialize 接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:"keyword1=value; keyword2=value."

在 Microsoft® Data Access SDK 中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出 init_string 参数中最常用的关键字。

#2


use shanghaishuju2003
select count(*) from shanghaishuju2003.dbo.dbo_his_200304_eng a where a.yh_id 
in(select b.yh_id from shanghaishuju2002.dbo.dbo_his_200204_eng b where b.yh_id
in (select c.yh_id from shanghaishuju2002.dbo.dbo_information c where c.hy_code='01')
and  a.yh_id in (select d.yh_id from shanghaishuju2002.dbo.dbo_t_info d where d.xl_1='35'))

#3


需要使用 链接服务器,同意  ghosthjt(天煞孤星)

#4


学习

#5


不能用shanghaishuju2003..吗?

use shanghaishuju2003
select count(*) from his_200304_eng where his_200304_eng.yh_id 
in(select yh_id from shanghaishuju2002..his_200204_eng where hanghaishuju2002..his_200204_eng.yh_id
in (select yh_id from shanghaishuju2002..information where hanghaishuju2002..information.hy_code='01')
and  yh_id in (select yh_id from shanghaishuju2002..t_info where shanghaishuju2002..t_info.xl_1='35'))

#6


你的两个库在几台机子上?

#7


访问链接服务器
使用 sp_addlinkedserver 创建链接服务器后,可以使用下列方法访问它: 

分布式查询。通过 SELECT、INSERT、UPDATE 和 DELETE 语句并使用基于链接服务器的名称访问此链接服务器中的表。


远程存储过程。可以使用四部分名称对链接服务器执行存储过程。 
使用 sp_addserver 可将运行 SQL Server 实例的服务器定义为远程服务器。然后就可以在远程存储过程调用中引用该远程服务器。远程服务器组件作为现有应用程序的兼容功能而被保留。

应用程序在移植到 SQL Server 2000 时,在一段时间内可能需要运行一些新代码(针对链接服务器定义使用分布式查询)和一些旧代码(使用远程服务器定义)。链接服务器和远程服务器都使用相同的名称空间,因此链接服务器或远程服务器定义的名称必须与被远程访问的服务器的网络名称不同。使用不同的服务器名称定义一个条目,然后使用 sp_setnetname 将其与远程服务器的网络名称关联起来。



说明  因为系统存储过程可以简明地显示出参数的使用,所以这部分的示例使用系统存储过程配置链接服务器。但是,SQL Server 企业管理器也支持配置链接服务器。有关更多信息,请参见配置链接服务器。