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

SQL2008查询问题
我要从sysobjects里面查找所有的以Y开头的表名(用户表),然后在这些表里面查找数据,要怎么写过程?

需要的是类似下面的结果(这个肯定是不行的):
select * from (select name from sysobjects where type='U' and name like 'Y%') where barcode='1234'

------解决方案--------------------
先找出表名,再根据表去找数据
------解决方案--------------------

declare @tb nvarchar(50),@sql nvarchar(2000)
select @tb=name from sysobjects where type='U' and name like 'Y%'
set @sql='select * from '+@tb+' where barcode=''1234'' '
exec(@sql)

如果你有一个以上y开头的表,需要写游标一个表一个表的查询
------解决方案--------------------
搜一下 foreachtable
------解决方案--------------------
引用:

declare @tb nvarchar(50),@sql nvarchar(2000)
select @tb=name from sysobjects where type='U' and name like 'Y%'
set @sql='select * from '+@tb+' where barcode=''1234'' '
exec(@sql)

如果你有一个以上y开头的表,需要写游标一个表一个表的查询

把@tb改成table类型 然后判断遍历这个@tb也可以。
------解决方案--------------------

不明白你这样写有什么意思,如果返回的是两个表呢。

declare @sql varchar(max)
set @sql = ''
select  @sql = @sql+ ' select * from  '+ t.name +'where barcode=''1234''   '
from sysobjects  as t join sys.all_columns as c on t.id = c.object_id and t.type='U' and c.name ='barcode'  and t.name like 'Y%'
exec (@sql)

引用:
我要从sysobjects里面查找所有的以Y开头的表名(用户表),然后在这些表里面查找数据,要怎么写过程?

需要的是类似下面的结果(这个肯定是不行的):
select * from (select name from sysobjects where type='U' and name like 'Y%') where barcode='1234'

------解决方案--------------------