Do you know how to convince SQL Server to consider WHERE clauses inside a view? It seems that SQL Server only launches my view, evaluating TOP 1, and then applying the "where id = N" clause to filter the result set. Example:
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, 'AJ' ); insert into mytable values ( 8, 'Al J.' ); insert into mytable values ( 8, 'Albert Johnston' ); select * from mytable; +
Problem:
-- bad, empty result set -- (I want this to answer 5, 'SMITH, ROBERT') select * from myview where id = 5
It works as expected:
-- good, answers 8, 'Albert Johnston' select * from myview -- good, also answers 8, 'Albert Johnston' select * from myview where id = 8
Now without a view:
-- good, answers 5, 'SMITH, ROBERT' select top 1 id, name from mytable where id = 5 order by len(name) desc
source share