私は次のように構築されたビューを持っています:
CREATE VIEW [dbo].[myview] AS
SELECT
dbo.table1.field1
,dbo.table2.field2
,dbo.HeavyStoredProcedure(dbo.table1.field1) AS calculated_value
...
FROM
table1
INNER JOIN table2 ON (...)
WHERE
...
AND NOT( EXISTS (SELECT * from table3
WHERE (table3.somefield = dbo.HeavyStoredProcedure(dbo.table1.field1)))
OR
EXISTS (SELECT * from table4
WHERE (table4.anotherfield = dbo.HeavyStoredProcedure(dbo.table1.field1)))
)
ここでの問題は、「HeavyStoredProcedure」がまったく同じ引数で何度も呼び出されるため、全体がクロールに遅くなることです。
table1 の行ごとに 1 回だけ"HeavyStoredProcedure"を呼び出し、計算結果を WHERE 句で 2 回再利用するようにするにはどうすればよいですか?