ビュー内のWHERE句を検討するようにSQLServerを説得する方法を知っていますか?SQLServerが私のビューだけを実行しているように見えます。TOP1を評価してから「whereid=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