マルチステップ テーブル値関数内に以下のような sql があります。理解しやすいように、クエリを少し短くしました。
CREATE FUNCTION [dbo].[fn_ph]
(
-- Add the parameters for the function here
@pAsOfDate date,
@pAccountId nvarchar(15)
)
RETURNS @HH TABLE
(
-- Add the column definitions for the TABLE variable here
AsOfDate date,
AccountId nvarchar(15),
LongName varchar(100),
ShortName varchar(100)
)
AS
BEGIN
declare @longOrShortIndicator int
select @longOrShortIndicator = COUNT(distinct LongOrShortIndicator) from table1 a
select a.*,
case
when a.SecType='CASH' and @longOrShortIndicator > 1 then 'C'
else a.LongOrShortIndicator
end as LongOrShortIndicator
from Table1 a
END
表現when a.SecType='CASH' and @longOrShortIndicator > 1 then 'C'
がボトルネックです。
@longOrShortIndicator > 1
クエリを削除すると、高速に実行されます
関数の外でクエリを実行すると、高速に返されます...
ローカル変数がクエリ全体を遅くしているのはなぜですか? どんな助けでも大歓迎です。
ありがとう