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

急!在线等!如何进行了多表查询?
如题,由于用户表实在太多了,几千个,简单的SQL查询系统会报超时错误。

我现在的思路是,建立一个存储过程,在里面把输入的查询条件,一个表一个表的查询,每找到一条记录就放到临时表里去。

我需要通过表的ID找到表的名称,再在这个表里找出符合条件的记录。可在存储过程里,怎么把记录像ASP代码那样循环出来啊???

请高人指教一下吧,谢谢了!

------解决方案--------------------
概念验证代码,未测试,仅提供思路:

<%
' open db connection
set conn = server.createobject( "adodb.connection ")
conn.open xxxx

' constructe sql clause
sql = " "
set rs = conn.execute( "select tablename from tablelist where id in (1,2,3,4) ")
while not rs.eof
sql = sql & " union all select your_date from " & rs( "tablename ") & " where your_condition "
rs.movenext
wend

' fetch data
set rs_result = conn.execute(sql)
%>
------解决方案--------------------
3000多不算多,sql超时首先要搞清楚是哪个语句超时,然后才好优化
------解决方案--------------------
3000的表……你是不是疯了?3000表都搜索完了,都猴年马月了啊!真么可能适合使用?

建议楼主把表进行整合吧,不整合,就是大问题!!请注意这个超级麻烦的问题!

有办法进行整合的,就是使用整合表+分表的方式进行的,整合表里面几乎所有的搜索条件的字段,几乎所在表的表名,每次搜索,都搜索整合表,簿搜索分表,只有在整合表中找到了所要搜索的信息,那么,在到分表中进行详细信息的搜索。这样就不会造成同一个查询要搜索大量表的问题了,效率相当然而的也搞出来了很多

最不好的一点,就是要有绝对强悍的触发器,让每个表的insert和delet都要触发相应的触发器,用来增加删除整合表里面的信息。

另外一个困难就是对整合表的建立上,这个才是让你头疼到要死的地方呢~不过建立了之后,你就万事OK了