+ -
当前位置:首页 → 问答吧 → 请教一个跨服务器跨库检索的问题

请教一个跨服务器跨库检索的问题

时间:2011-10-08

来源:互联网

两个sql server数据库在两个不同的服务器上,我定义了两个连接,conn和conn2

但是在asp里面写代码时就遇到问题了,rs应该是取出一个数据集的,但是rs("xx")每次只能有一个数据,放在sql2的语句里就不对了,怎么写才对呢?

sql="select * from table1"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1 
set rs = Conn.execute(sql)
sql2="select * from table2 where xx='"&rs("xx")&"'"
set rs2=server.CreateObject("adodb.recordset")
rs2.open sql2,conn2,1,1 
set rs2 = Conn2.execute(sql2)

作者: yuefushane   发布时间: 2011-10-08

rs("xx")如果是数值类型的话sql2="select * from table2 where xx="&rs("xx") 把单引号去了

作者: beyond_me21   发布时间: 2011-10-08

引用 1 楼 beyond_me21 的回复:

rs("xx")如果是数值类型的话sql2="select * from table2 where xx="&rs("xx") 把单引号去了


不是数值类型的,该怎么办呢?

作者: yuefushane   发布时间: 2011-10-08

你执行后有提示什么错误没?你那样写应该是没问题的

作者: beyond_me21   发布时间: 2011-10-08

不对,你这样有问题
sql="select * from table1"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1  
set rs = Conn.execute(sql)
sql2="select * from table2 where xx='"&rs("xx")&"'"
set rs2=server.CreateObject("adodb.recordset")
rs2.open sql2,conn2,1,1  
set rs2 = Conn2.execute(sql2)
应该改成
sql="select * from table1"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1 '这里已经执行查询语句返回数据记录了不需要再 set rs=conn.execute了

sql2="select * from table2 where xx='"&rs("xx")&"'"
set rs2=server.CreateObject("adodb.recordset")
rs2.open sql2,conn2,1,1  

另外,检查一下你的conn2的数据库连接是否正确

作者: beyond_me21   发布时间: 2011-10-08

引用 3 楼 beyond_me21 的回复:

你执行后有提示什么错误没?你那样写应该是没问题的


不是有错误,是执行结果不对,我取出来的rs里面应该有很多数据,但是不用循环的话,rs("xx")只能处理第一条数据,所以sql2的结果就不对了

作者: yuefushane   发布时间: 2011-10-08

引用 4 楼 beyond_me21 的回复:

不对,你这样有问题
sql="select * from table1"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
set rs = Conn.execute(sql)
sql2="select * from table2 where xx='"&rs("xx")&"'"
……


语法是没有问题的,问题是这样:
sql2的执行结果不对,取出来的rs里面应该有很多数据,但是不用循环的话,rs("xx")只能处理第一条数据,所以sql2的结果就不对了

作者: yuefushane   发布时间: 2011-10-08

原来是这样啊,那你可以这样,先取出rs(xx)存在一个字符串内,再从另外一个数据库中取结果
dim str
sql="select * from table1"
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1  
do while not rs.eof
  str=str&",'"&rs("xx")&"'"
  rs.movenext
loop
str=right(str,len(str)-1) '去掉第一个逗号
rs.close
sql2="select * from table2 where xx in("&str&")"
set rs2=server.CreateObject("adodb.recordset")
rs2.open sql2,conn2,1,1 
rs2.close

作者: beyond_me21   发布时间: 2011-10-08