マイペース庶民

マイペースで生きたい

SQL ServerのVIEWにORDERを指定する

そもそもVIEWにORDERを指定することの是非は置いといて、SQL ServerのVIEWに順序を指定してみよう。

方法は2通り

-- 方法その1:TOP 100 PERCENT
CREATE VIEW ordered_view AS
SELECT TOP 100 PERCENT * FROM base_tbl
ORDER BY col_1, col_2, col_3;

-- 方法その2:OFFSET 0 ROWS
CREATE VIEW ordered_view AS
SELECT * FROM base_tbl
ORDER BY col_1, col_2, col_3
OFFSET 0 ROWS;

ここからが重要

方法その1は
SQL SERVER 2000:利用可能
SQL SERVER 2005(2008):修正プログラム適用+トレースフラグ有効化+データベースの互換性レベル変更で利用可能
SQL SERVER 2012:利用不可

方法その2も
SQL SERVER 2012で利用可能なことは確認できるけど
いつか利用できなくなるんじゃないでしょうか。
OFFSET-FETCHも2012導入だし、修正入るだろうなと思います。
といかOFFSET-FETCHのおかげでページングが分かりやすくて捗る。
よくわからんでTOPを多用してたのが恥ずかしい。

参考リンク
DO’s&DONT’s #13: 絶対にやってはいけないこと - ORDER BY が指定されていないクエリの結果が一定の順番に並んでいると仮定すること - Microsoft SQL Server Japan Support Team Blog - Site Home - MSDN Blogs
[FIX] SQL Server 2008 で ORDER BY 句を使用したビューを使用してクエリを実行しても結果がランダムな順序で返される
OFFSET FETCH 句 (SQL Server Compact)