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が最適化を担当しますか?

4

1 に答える 1

0

あなたはこれを行うことができます...

SELECT
    Col1,
    Col2,
    col3,
    dbo.fn2(col3) AS Col4
FROM
    (
    SELECT
        Col1,
        Col2,
        dbo.fn1(col2) as Col3
    FROM
        TestTable
    ) foo
于 2009-07-31T08:08:23.587 に答える