【发布时间】:2012-09-10 23:37:27
【问题描述】:
你知道如何说服 SQL Server 在视图中考虑 WHERE 子句吗? 看起来 SQL Server 只运行我的视图,评估 TOP 1,然后应用“where id=N”子句过滤视图的结果集。 示例:
create table mytable ( id int, name varchar(64) );
insert into mytable values ( 5, 'BOB' );
insert into mytable values ( 5, 'ROBERT' );
insert into mytable values ( 5, 'SMITH, ROBERT' );
insert into mytable values ( 8, 'A.J.' );
insert into mytable values ( 8, 'Al J.' );
insert into mytable values ( 8, 'Albert Johnston' );
select * from mytable;
+----+-----------------+
: id : name :
+----+-----------------+
: 5 : BOB :
: 5 : ROBERT :
: 5 : SMITH, ROBERT :
: 8 : A.J. :
: 8 : Al J. :
: 8 : Albert Johnston :
+----+-----------------+
create view myview as
select top 1 id, name
from mytable
order by len(name) desc
问题:
-- bad, empty result set
-- (I want this to answer 5, 'SMITH, ROBERT')
select * from myview where id = 5
这些按预期工作:
-- good, answers 8, 'Albert Johnston'
select * from myview
-- good, also answers 8, 'Albert Johnston'
select * from myview where id = 8
现在没有视图:
-- good, answers 5, 'SMITH, ROBERT'
select top 1 id, name
from mytable
where id = 5
order by len(name) desc
【问题讨论】:
标签: sql sql-server tsql where sql-view