你知道如何说服 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