1万个表可以用存储过程同时查询吗?

WYHVC 2011-02-28 04:16:07
假设有1万个表:table1,table2,table3...table5000,tb1,tb2...tb5000,
虽然各表结构可能略有差异,但是都会含有相同的一个字段假设名为nm,
现在要根据nm字段查出所有表中的结果
请问应该怎样写查询的存储过程?帮我写查询语句也行,
谢谢
...全文
204 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
samyou 2011-03-04
  • 打赏
  • 举报
回复
这个假设有点离谱
流氓兔 2011-03-04
  • 打赏
  • 举报
回复

有必要这么动态吗?这就真的灵活了莫,效率呢
飞啊子 2011-03-04
  • 打赏
  • 举报
回复
需防止注入...
dighonor 2011-03-04
  • 打赏
  • 举报
回复
动态sql查
WYHVC 2011-03-03
  • 打赏
  • 举报
回复
谢谢大家帮忙.
我们领导写出来了,就是用游标,需要查找的表名变量用text类型一次就成了
不服不行,跟人比,脑袋运转速度,技术水平都差的不是一点半点
叶子 2011-03-01
  • 打赏
  • 举报
回复
1万个表也可以查,但是字段都不同,就不好弄了。
WYHVC 2011-03-01
  • 打赏
  • 举报
回复
不好意思,我没说清楚,不是要查表的关联,或统计数量什么的
对表i来说:
tablei: nm a b d
select * from tablei where nm='exampname'
结果可能有一条数据,也可能没有,如果有就要求显示出来
...
对第n个表来说:
bn: nm a aa c d b e
select * from bn where nm='exampname'
结果可能有一条数据,也可能没有,如果有就要求显示出来
程序里要求把所有表(可能上万)都查一遍,列出所有nm='exampname'的数据表,表格的列头是所有表字段的合集

nevergu 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wyhvc 的回复:]
不好意思,我没说清楚,不是要查表的关联,或统计数量什么的
对表i来说:
tablei: nm a b d
select * from tablei where nm='exampname'
结果可能有一条数据,也可能没有,如果有就要求显示出来
...
对第n个表来说:
bn: nm a aa c d b e
select * from bn where nm='exampname'……
[/Quote]


呃。。。建议做个临时表 循环查找table1...tablen
查询出来的结果insert 临时表 最后select * from 临时表就行了。
不知道理解的对不。
abuying 2011-02-28
  • 打赏
  • 举报
回复
sp_MSforeachtable的参数,sp_MSforeachdb
--更新PUBS数据库中已t开头的所有表的统计: 
EXEC sp_MSforeachtable @whereand="and name like 't%'",
@replacechar='*',
@precommand="print 'Updating Statistics.....' print ''",
@command1="print '*' update statistics * ",
@postcommand= "print''print 'Complete Update Statistics!'"
xuanyanlan 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wyhvc 的回复:]
所有表的字段可能是不同的,也有可能有些相同
所有表一定都会包含一个相同的字段nm
根据nm等于..查询,查询所有表的基本信息

领导刚才说,5000个表查询速度不能超过5秒
他说可能是用游标
[/Quote]

真能查5000表的关联
gw6328 2011-02-28
  • 打赏
  • 举报
回复

领导刚才说,5000个表查询速度不能超过5秒
他说可能是用游标


???
ILOVE_ASPNET 2011-02-28
  • 打赏
  • 举报
回复

SELECT P1.*,P2.*,P3.* FROM A AS P1 INNER JOIN (SELECT 你的字段 FROM B ) P2 ON P1.字段= P2.字段 INNER JOIN (SELECT 字段 FROM C )P3 ON P1.字段= P3.字段


不知道LZ是不是说的这个意思这样类似一个递归的方法, 可以结果你后面的结果集把条件带上去,有多少个表就可以这样拼条件,


所有条件就是你的字段=? 查询所有表的字段就是p1.* p2.* p3.*


ohfox 2011-02-28
  • 打赏
  • 举报
回复
什么系统用到了这么多的表,好厉害
fwacky 2011-02-28
  • 打赏
  • 举报
回复

declare @sql varchar(max)
set @sql='';
select @sql=@sql+'selct nm from '+ name +' union all ' from sys.objects s where s.type='u'
and name like 'table%'
--print (@sql);
print( left(@sql,len(@sql)-LEN(' union all ')))
exec( left(@sql,len(@sql)-LEN(' union all ')))
WYHVC 2011-02-28
  • 打赏
  • 举报
回复
所有表的字段可能是不同的,也有可能有些相同
所有表一定都会包含一个相同的字段nm
根据nm等于..查询,查询所有表的基本信息

领导刚才说,5000个表查询速度不能超过5秒
他说可能是用游标
feixianxxx 2011-02-28
  • 打赏
  • 举报
回复
应该是用 sys.columns 查询出字段所在的所有表 拼接起来
然后 动态执行下不就可以了?
fang2020 2011-02-28
  • 打赏
  • 举报
回复
LZ说的不是很明白,你要查什么东西,查所有表关联的信息还是查所有表的基本信息...
Shawn 2011-02-28
  • 打赏
  • 举报
回复
动态SQL,就是先把SQL语句拼成一个字段串,再用exec或sp_executesql来执行。
declare @sql nvarchar(max)
set @sql = N''
select @sql = @sql + N'select [nm] from ' + QUOTENAME([name]) + N' union all ' + CHAR(13) + CHAR(10) from sys.tables where [name] like 'table%'
select @sql = N'select * from(' + CHAR(13) + CHAR(10) + LEFT(@sql, len(@sql) - LEN(N' union all ') -2) + N') a where [nm] = ''xxx'''
print @sql
exec(@sql)

--RESULT
/*
select * from(
select [nm] from [table2] union all
select [nm] from [table1] union all
select [nm] from [table3]) a where [nm] = 'xxx'
*/
WYHVC 2011-02-28
  • 打赏
  • 举报
回复
请问什么是动态sql查询?给我解释一下好吗?
我是幼儿园水平,只限于知道一些sql名词,不好意思,麻烦了
永生天地 2011-02-28
  • 打赏
  • 举报
回复
可用动态sql查,但字段不同怎么查

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧