日期:2014-05-18  浏览次数:20363 次

求助,从表中动态获得查询表名,怎么做呢?
有个表 flow,里面保存着一些数据,其中有字段form_id,form_filter保存着,我需要动态查询的表的部分表名和where,flow保存很多数据,假如有一个form_id 值为 tab1,那个就要查询表 form_tab1这个表的中数据select title form form_tab1 where filter=form_filter; (form_filter能保证数据的唯一性)
最后还要把flow的部分数据和这个 查询的 title 一起查询出

各种goolge,百度都没找到方法,大家帮帮忙哦

------解决方案--------------------
要查询多个表的话,用存储过程循环查询,不过这样设计增加了开发难度是否必要
------解决方案--------------------
SQL code

declare @sql nvarchar(1000)
select @sql=''
select @sql=@sql+'select title from '+form_id+ ' where filter = '+form_filter+ 'union all   ' from flow
exec(@sql)

------解决方案--------------------
try this,
SQL code

create table flow
(id int, name varchar(5), descr varchar(5),
 form_id varchar(5), form_filter varchar(10))

insert into flow
select 1,'n_1','d_1','tab1','23231232'

create table form_tab1
(form_filter varchar(10),title varchar(10))

insert into form_tab1
select '23231232','t_1'



create table #t(id int,title varchar(10))

declare ap cursor forward_only
for select
'select '+rtrim(id)+', title from form_'+form_id+' where form_filter='''+form_filter+''' ' tsql
from flow

declare @sql varchar(6000)
open ap
fetch next from ap into @sql
while(@@fetch_status<>-1)
begin
  insert into #t(id,title) exec(@sql)
  fetch next from ap into @sql
end
close ap
deallocate ap

select a.id,a.name,a.descr,b.title
from flow a
inner join #t b on a.id=b.id

/*
id          name  descr title
----------- ----- ----- ----------
1           n_1   d_1   t_1

(1 row(s) affected)
*/