专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

同时连接两个不同服务器的数据库如何查询-MS-SQLServer/疑难问题

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:11:51       共计:3605 浏览
昨天问过大家了,可是没有解决了。两个数据库两个相同的表,相同的字段。
本来用
SQL code
			
				select * from db1.dbo.tb where col like '%123%'
union all
select * from db2.dbo.tb where col like '%123%'
			

就可以解决,但连接出现了问题。
SQL code
			
				openrowset/openquery/opendatasource
			

服务器从安全的角度禁止使用了。
SQL code
			
				--创建链接服务器 exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址' 
exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '用户名' , '密码' 
--查询示例 
select * from ITSV.数据库名.dbo.表名
			

虽然不报错,但每次都说
SQL code
			
				Could not find server ITSV in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
			

看来也不能用。
我现在可以这样连,但不知如何写SQL
C# code
			
				dim startime,conn1,conn2,connstr1,connstr2,db1,db2 
startime=timer() 
db1="database/db1.mdb" '数据库1 
db2="database/db2.mdb" '数据库2 
on error resume next '尝试连数据库,一直到超时,但可以加强SQL注入过滤 
connstr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db1) 
connstr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db2) 
set conn1=server.createobject("ADODB.CONNECTION") 
set conn2=server.createobject("ADODB.CONNECTION") 
conn1.Open connstr1 
conn2.open connstr2
			

这样可以打开两个连接,但SQL查询该怎么写?比如我在两个库里同时检索“123” ------回答---------
------其他回答(20分)---------
先链接.
SQL code
		
			不同服务器数据库之间的数据操作
--创建链接服务器 
exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址' 
exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '用户名' , '密码' 
--查询示例 
select * from ITSV.数据库名.dbo.表名 
--导入示例 
select * into 表 from ITSV.数据库名.dbo.表名 
--以后不再使用时删除链接服务器 
exec sp_dropserver 'ITSV' , 'droplogins' 
--连接远程/局域网数据(openrowset/openquery/opendatasource) 
--1、openrowset 
--查询示例 
select * from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名) 
--生成本地表 
select * into 表 from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名) 
--把本地表导入远程表 
insert openrowset( 'SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名) 
select *from 本地表 
--更新本地表 
update b 
set b.列A=a.列A 
from openrowset('SQLOLEDB' , 'sql服务器名' ; '用户名' ; '密码' , 数据库名.dbo.表名) as a inner join 本地表 b 
on a.column1 = b.column1 
--openquery用法需要创建一个连接 
--首先创建一个连接创建链接服务器 
exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址' 
--查询 
select * 
FROM openquery(ITSV , 'SELECT * FROM 数据库.dbo.表名') 
--把本地表导入远程表 
insert openquery(ITSV , 'SELECT * FROM 数据库.dbo.表名') 
select * from 本地表 
--更新本地表 
update b 
set b.列B=a.列B 
FROM openquery(ITSV , 'SELECT * FROM 数据库.dbo.表名') as a 
inner join 本地表 b on a.列A=b.列A 
--3、opendatasource/openrowset 
SELECT * 
FROM opendatasource('SQLOLEDB' , 'Data Source=ip/ServerName ; User ID=登陆名 ; Password=密码').test.dbo.roy_ta 
--把本地表导入远程表 
insert opendatasource('SQLOLEDB' , 'Data Source=ip/ServerName ; User ID=登陆名 ; Password=密码').数据库.dbo.表名 
select * from 本地表
		

然后:
SQL code
		
			select * from machine1.db1.dbo.tb where col like '%123%'
union all
select * from machine2.db2.dbo.tb where col like '%123%'
		

------其他回答(10分)---------
引用 1 楼 dawugui 的回复:
先链接.
SQL code
不同服务器数据库之间的数据操作
--创建链接服务器
exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '用户名' , '密码'
--查询示例
select……
先链接,参考此资料操作 ------其他回答(20分)---------
那是你链接不对,例如用户,密码等输入错误. ------其他回答(20分)---------
引用楼主 cnw168 的回复:
dim startime,conn1,conn2,connstr1,connstr2,db1,db2
startime=timer()
db1="database/db1.mdb" '数据库1
db2="database/db2.mdb" '数据库2
on error resume next '尝试连数据库,一直到超时,但可以加强SQL注入过滤
connstr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db1)
connstr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db2)
set conn1=server.createobject("ADODB.CONNECTION")
set conn2=server.createobject("ADODB.CONNECTION")
conn1.Open connstr1
conn2.open connstr2

建立两个连接了,就得分别查询 ------其他回答(20分)---------
引用 15 楼 cnw168 的回复:
dawugui 感谢你昨天帮我解决了问题,但是服务器不支持openrowset/openquery/opendatasource
该如何解决

如果不用:openrowset/openquery/opendatasource
但是你在企业管理器手动注册或连接了其他服务器的sql server.
可直接如下写语句:
select * from machine1.db1.dbo.tb where col like '%123%'
union all
select * from machine2.db2.dbo.tb where col like '%123%' ------其他回答(10分)---------
exec sp_addlinkserver 'srk_lnk', '' , 'SQLOLEDB' , '远程数据库服务器名或ip地址' 
exec sp_addlinkedsrvlogin 'svr_lnk' , 'false' , null , '用户名' , '密码' 
  MSTDC 服务启动
  再 还是 不 行的 话
  八成 就 是 网络有 问题 了
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:ASP.NET MVC上传文件----uploadify的使用 | ·下一条:SQL SERVER 本地查询更新操作远程数据库的四种方法

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有