TOP句で変数を使ってSQLを1行にする

記事内に広告が含まれています。

TOP句を使って複雑なSQLを簡単にします。

TOP句で変数を使ってSQLを1行にする

TOP句を使って複雑なSQLを簡単にします。

SELECTで取得する最大行数を切り替えてみる

EXCELに出力する場合と画面に出力する場合でSELECTで取得する最大行数を切り替えたかったのですが、これまではSQLServerのT-SQLでTOP句の値が動的に変えれないと思っていたので、SQLを

    IF out_souce = 'EXECL'          --EXECに出力
    BEGIN
        SELECT TOP 65001 * FROM test_table
    END
    ELSE                            --画面に出力
    BEGIN
        SELECT TOP 1001 * FROM test_table
    END

のようにIF文で切り分けていたのですが、これでは長いSQLや条件が複雑なSQLもTOP句の値が違うだけで2つ書かなければならずメンテナンス性に欠けます。

しかしながらいつの間にかできるようになっているみたいです

    DECLARE @get_cnt AS INT = 0

    IF out_souce = 'EXECL'          --EXECに出力
    BEGIN
        Select @get_cnt = 65001
    END
    ELSE                            --画面に出力
    BEGIN
        Select @get_cnt = 1001
    END
    SELECT TOP ( @get_cnt ) * FROM test_table

というように「( )」で囲んでやると行けます。

なんと簡単な。

これで複雑なSQLでも1行で書けるのでメンテナンス性がグッと上がります。

タイトルとURLをコピーしました