sql >> データベース >  >> RDS >> Sqlserver

SQLServer2008でパラメーター化されたVIEWを作成する

    インラインのテーブル値関数を作成してみてください。例:

    CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
    RETURNS TABLE
    AS
    RETURN
    (
        SELECT Field1, Field2
        FROM SomeTable
        WHERE Field3 = @Parameter1
    )
    
    -- Then call like this, just as if it's a table/view just with a parameter
    SELECT * FROM dbo.fxnExample(1)
    

    SELECTの実行プランを表示すると、関数についての言及はまったく表示されず、実際には、クエリされている基になるテーブルが表示されます。これは、クエリの実行プランを生成するときに、基になるテーブルの統計が使用されることを意味するため、適切です。

    回避すべきことは、基になるテーブル統計が使用されず、実行プランが不十分なためにパフォーマンスが低下する可能性があるため、マルチステートメントテーブル値関数です。
    回避する例 :

    CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
        RETURNS @Results TABLE(Field1 VARCHAR(10), Field2 VARCHAR(10))
    AS
    BEGIN
        INSERT @Results
        SELECT Field1, Field2
        FROM SomeTable
        WHERE Field3 = @Parameter1
    
        RETURN
    END
    

    微妙に異なりますが、関数をクエリで使用するとパフォーマンスに大きな違いが生じる可能性があります。



    1. SSMSでオブジェクトエクスプローラーの詳細ウィンドウを使用して複数のオブジェクトを処理する方法-SQLServer/TSQLチュートリアルパート22

    2. MariaDBのHOUR()とEXTRACT(HOUR…):違いは何ですか?

    3. クエリ結果をMariaDBのコンマ区切りリストに変換する

    4. Unityからデータベースに接続する方法