我们正在做这样的事情避免视图
create view v1
as
select 'tab1' as table_name , * from table1
union All
select 'tab2' as table_name , * from table2
union All
select 'tab3' as table_name , * from table3
然后在SP,
declare @var = function_gettablename()
select * from v1 where table_name = @var and datetoload = <ActualDate>
function_gettablename() = gives the table name based on parameters
datetoload =非聚集索引列这是对mutuallt独家所有的表格。即一个日期将只在一个表中可用
现在的问题是,在执行计划:使用@var使视图查询所有三个表,而不是所需的一个。
有没有一种方法,它应用过滤器,然后应用联合所有,而不是运行union all,然后应用过滤器。
感谢 AB
你能在你的SP做到这一点? '如果@var ='tab1'开始select * from table1 where datetoload = end else if @var ='tab2'begin select * from table2 where datetoload = end else if @var ='tab3'begin select * from table3 where datetoload = end' –
2013-02-14 04:50:01
如果视图的唯一目的是在proc中调用,我认为你最好用动态SQL或者@rs。提示。如果你不知道哪张表有你的日期,但是你有一个这样的功能,这个视图看起来好像有用。 – 2013-02-14 04:50:48