2016-03-22 13 views
0

私は以下のビュー定義を見直しています。私はTOPで使用されていない限り、ビューの定義でどのように順序付けられていないかに関する情報を見つけることができました。このビューが意図したとおりに機能するかどうかはわかりません。このビューは、EmpployeeDupがEmpIDを重複していると仮定して、最新の従業員レコードをすべて与えることが期待されます。ビューでby by order by partitionを使用することは有効ですか

これは期待どおりに動作するようですが、SQL Serverのビュー定義で使用された場合、order byが保証されていないと私は考えることはできません。

CREATE VIEW Test AS 

SELECT * FROM 

(SELECT * 

,ROW_NUMBER() OVER (PARTITION BY EmpID ORDER BY LastupdateDatetime DESC) as row_num 

FROM EmpployeeDup) as rows 

WHERE row_num = 1 

; 

GO 

答えて

0

あなたの質問への答えは、あなたの質問が期待通りに機能することです。 TOP、OFFSET、またはFOR XMLなしでビュー内で注文を使用しようとすると、 "Not Honored"は起こりません。あなたはエラーにそれはかなり明確にクエリを動作させるために何をしなければならないかを説明しますエラーの代わりに

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

を取得します。

+0

「TOP、OFFSETまたはFOR XMLも指定されていない場合」に焦点を当てていました。このビュー定義では明示的にこれらの構文を使用していないため、 – nee21

+0

@ nee21はウィンドウ関数なので適用されません – SQLChao

関連する問題