0
CREATE VIEW View1 
    AS 
    SELECT Col1, 
     Col2, 
     dbo.fn1(col2) as Col3 
    FROM TestTable 

    /* 
    --Instead of writing below query I created a new View View2 


    SELECT Col1, 
     Col2, 
     dbo.fn1(col2) as Col3 
     dbo.fn2(dbo.fn1(col2)) as Col4 
    FROM TestTable 
    */ 

    CREATE VIEW View2 
    AS 
    SELECT Col1, 
     Col2, 
     Col3, 
     dbo.fn3(col3) as Col4 
    FROM TestTable 

私は上記のようなクエリを持っています。私はfn1の出力である列を持っています。私はその出力を他の関数fn2に使いたいと思っていました。その場合、私はfn2でcol3を直接使用することはできませんので、以下のように2つの関数とビューを分割しました。私は正しい方向に向かっているのか、自分がやっていることが正しいのか、それとももっと良い方法があるのか​​を知りたがっていますか? View1のコメント部分で、関数fn1が2回呼び出されますか?またはSQL Serverは最適化の世話をしますか?あなたがこれを行うcoudlSQL Selectの機能

答えて

0

...

SELECT 
    Col1, 
    Col2, 
    col3, 
    dbo.fn2(col3) AS Col4 
FROM 
    (
    SELECT 
     Col1, 
     Col2, 
     dbo.fn1(col2) as Col3 
    FROM 
     TestTable 
    ) foo