关于跨库查询的sql语句?同一台服务器,不同数据库?

时间:2021-10-05 07:34:55

<!--#include file="conn.asp"-->
if danhao="" then
response.write "请输入要查找的货号。"
else
fgsbm = left(danhao,4)
huohao = mid(danhao,5,9)
jshj = mid(danhao,16,2)
set rs=server.createobject("adodb.recordset")
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and sxhh ='"&huohao&"'"
rs.open sql,conn,1,1
if rs.eof then
Response.Write "没有搜索到内容。"
else
do while not rs.eof

单号的格式为1001-12345-123
前四位为公司编码:固定的  ;
中间为货号 不固定 有的3位,有的4位 ,有的5位不等;
最后组为件数 :不固定  ;
现在要将其拆分为三组数字 去查询不同的数据库?
fgsbm = left(danhao,4)
huohao = mid(danhao,5,9)  ??
jshj = mid(danhao,16,2)   ??
然后根据fgsbm 去连接不同的数据库查询  这个sql语句要怎么写?

12 个解决方案

#1


if语句判断下要查询哪个数据库不就行了,不同的内容sql设置不同的语句

你的conn配置的用户需要有访问这3个数据库的权限才行

#2


fgsbm=split(danhao,"-")(0)
可以参考一下split的用法

#3


引用 1 楼 showbo 的回复:
if语句判断下要查询哪个数据库不就行了,不同的内容sql设置不同的语句

你的conn配置的用户需要有访问这3个数据库的权限才行


权限肯定是有的 用的sa 

sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and sxhh ='"&huohao&"'"
rs.open sql,conn,1,1
if rs.eof then
Response.Write "没有搜索到内容。"
else
do while not rs.eof
能否帮忙改下看看 

#4


还有要如何判断 用户输入的字符串不是
1123-22222-3333
这样的格式 ???

#5


danhao="1001-12345-123"
set rx=new RegExp
rx.Global=true
rx.Pattern="^\d{4}-\d{3,}-\d{1,}$"'第二组数字最少3位,如果有他限制自己修改,低三组数字最少1位
if not rx.Test(danhao) then
  response.write "单号错误"
  response.end
end if
arr=split(danhao,"-")
set rs=server.createobject("adodb.recordset")
if arr(0)="xxxx" then
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and sxhh ='"&huohao&"'"
elseif arr(0)="xxxxxxxxxxx"
sql="xxxxxxxxxxxx"
else'默认查询的数据库
sql=""
end if
rs.open sql,conn,1,1
if rs.eof then
Response.Write "没有搜索到内容。"
else
do while not rs.eof

#6


你这个没有连接不同的数据库啊 

#7


比如现在有两个库A,B
A 输入的单号 1001-11890-1  去查询A库
B输入的单号 1002 -1122-110  去查询B库
if danhao="" then
response.write "请输入要查找的货号,格式为公司编码+货号+件数,如:4001-123456-10。"
else
set rx = new RegExp
rx.Global = true
rx.Pattern="^\d{4}-\d{3,}-\d{1,}$"'第二组数字最少3位,如果有他限制自己修改,低三组数字最少1位
if not rx.Test(danhao) then
response.Write "您输入的单号格式错误"
response.End()
end if
arr = split(danhao,"-")
'fgsbm = split(danhao,"-")(0)
'sxhh = split(danhao,"-")(1)
'jshj = split(danhao,"-")(2)
set rs=server.createobject("adodb.recordset")
if arr(0)="1001" Then
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='111' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
elseif arr(0) ="1002" Then
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='112' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
end if
rs.open sql,conn,1,1


这样没有链接到不同的数据库啊 链接的还是conn.asp中的数据库啊
以下是conn.asp的文件
<%
set conn=server.createobject("ADODB.CONNECTION")
str = "Provider=SQLOledb;data source=.;uid=sa;pwd=aaaa;DATABASE=A"
conn.open str

Set rs=server.CreateObject("adodb.recordset")
if err.number<>0 then 
   err.clear
   conn.close
   set conn=nothing
   response.write "数据库连接出错!"
   Response.End
else
   if err then 
  err.clear
  conn.close
  set conn=nothing
   response.write "数据库连接出错!"
  Response.End 
   end if
end if 

%>

#8


。。。你不就关闭下原来的链接,重新open下链接到不同的数据库就好了。。
conn.close
set rs=server.createobject("adodb.recordset")
if arr(0)="1001" Then
conn.open "Provider=SQLOledb;data source=.;uid=sa;pwd=aaaa;DATABASE=xxxxxxxxx"
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='111' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
elseif arr(0) ="1002" Then
conn.open "Provider=SQLOledb;data source=.;uid=sa;pwd=aaaa;DATABASE=xxxxxxxxxxxxxxxxxxxxxxxxx"
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='112' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
end if

#9


嗯 这样子是可以了 谢谢版主 
还有个疑问 这样放在search.asp 会不会有安全问题?
如何将连接语句放到conn.asp文件?

#10


如果你的要求有这种,可以将链接字符串放到conn.asp中,不用每次都写死在页面

connstra="aaaaaaaa"
constrb="bbbbbbbbbb"


安全不安全看你代码了,要是代码写的有漏洞你放哪里都不安全

#11


连接语句卸载conn.asp 怎么弄 怎么跟search.asp关联 
版主 再教教  最好帮忙写出来

#12


该回复于2014-03-22 14:24:55被管理员删除

#1


if语句判断下要查询哪个数据库不就行了,不同的内容sql设置不同的语句

你的conn配置的用户需要有访问这3个数据库的权限才行

#2


fgsbm=split(danhao,"-")(0)
可以参考一下split的用法

#3


引用 1 楼 showbo 的回复:
if语句判断下要查询哪个数据库不就行了,不同的内容sql设置不同的语句

你的conn配置的用户需要有访问这3个数据库的权限才行


权限肯定是有的 用的sa 

sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and sxhh ='"&huohao&"'"
rs.open sql,conn,1,1
if rs.eof then
Response.Write "没有搜索到内容。"
else
do while not rs.eof
能否帮忙改下看看 

#4


还有要如何判断 用户输入的字符串不是
1123-22222-3333
这样的格式 ???

#5


danhao="1001-12345-123"
set rx=new RegExp
rx.Global=true
rx.Pattern="^\d{4}-\d{3,}-\d{1,}$"'第二组数字最少3位,如果有他限制自己修改,低三组数字最少1位
if not rx.Test(danhao) then
  response.write "单号错误"
  response.end
end if
arr=split(danhao,"-")
set rs=server.createobject("adodb.recordset")
if arr(0)="xxxx" then
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and sxhh ='"&huohao&"'"
elseif arr(0)="xxxxxxxxxxx"
sql="xxxxxxxxxxxx"
else'默认查询的数据库
sql=""
end if
rs.open sql,conn,1,1
if rs.eof then
Response.Write "没有搜索到内容。"
else
do while not rs.eof

#6


你这个没有连接不同的数据库啊 

#7


比如现在有两个库A,B
A 输入的单号 1001-11890-1  去查询A库
B输入的单号 1002 -1122-110  去查询B库
if danhao="" then
response.write "请输入要查找的货号,格式为公司编码+货号+件数,如:4001-123456-10。"
else
set rx = new RegExp
rx.Global = true
rx.Pattern="^\d{4}-\d{3,}-\d{1,}$"'第二组数字最少3位,如果有他限制自己修改,低三组数字最少1位
if not rx.Test(danhao) then
response.Write "您输入的单号格式错误"
response.End()
end if
arr = split(danhao,"-")
'fgsbm = split(danhao,"-")(0)
'sxhh = split(danhao,"-")(1)
'jshj = split(danhao,"-")(2)
set rs=server.createobject("adodb.recordset")
if arr(0)="1001" Then
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='111' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
elseif arr(0) ="1002" Then
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='112' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
end if
rs.open sql,conn,1,1


这样没有链接到不同的数据库啊 链接的还是conn.asp中的数据库啊
以下是conn.asp的文件
<%
set conn=server.createobject("ADODB.CONNECTION")
str = "Provider=SQLOledb;data source=.;uid=sa;pwd=aaaa;DATABASE=A"
conn.open str

Set rs=server.CreateObject("adodb.recordset")
if err.number<>0 then 
   err.clear
   conn.close
   set conn=nothing
   response.write "数据库连接出错!"
   Response.End
else
   if err then 
  err.clear
  conn.close
  set conn=nothing
   response.write "数据库连接出错!"
  Response.End 
   end if
end if 

%>

#8


。。。你不就关闭下原来的链接,重新open下链接到不同的数据库就好了。。
conn.close
set rs=server.createobject("adodb.recordset")
if arr(0)="1001" Then
conn.open "Provider=SQLOledb;data source=.;uid=sa;pwd=aaaa;DATABASE=xxxxxxxxx"
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='111' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
elseif arr(0) ="1002" Then
conn.open "Provider=SQLOledb;data source=.;uid=sa;pwd=aaaa;DATABASE=xxxxxxxxxxxxxxxxxxxxxxxxx"
sql="select jydbh,fhrxm,shrxm,shrdh,jydzt,Name from jydxx,Bm_jydzt where jydzt=id and (fgsbm='112' ) and sxhh ='"&arr(1)&"' and jshj="&arr(2)&""
end if

#9


嗯 这样子是可以了 谢谢版主 
还有个疑问 这样放在search.asp 会不会有安全问题?
如何将连接语句放到conn.asp文件?

#10


如果你的要求有这种,可以将链接字符串放到conn.asp中,不用每次都写死在页面

connstra="aaaaaaaa"
constrb="bbbbbbbbbb"


安全不安全看你代码了,要是代码写的有漏洞你放哪里都不安全

#11


连接语句卸载conn.asp 怎么弄 怎么跟search.asp关联 
版主 再教教  最好帮忙写出来

#12


该回复于2014-03-22 14:24:55被管理员删除