11

SQL Server 2005 で、フルテキスト インデックスで使用されるインデックス付きビューでユーザー定義関数を使用しようとしています。問題のストアド プロシージャとビューで UDF を動作させることができました。しかし、ビューにインデックスを作成しようとすると、次のエラーが発生します...

ビューによって参照される関数 "dbo.GetCurrentImage" がユーザーまたはシステム データ アクセスを実行するため、ビュー "DevDatabase.dbo.View_PersonSearch" にインデックスを作成できません。

私はこれに困惑しています。以下は、私がやろうとしていることの例です。何か不足していますか、それとも可能ですか?

ユーザー定義関数

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[GetCurrentImage](@Person_ID int) 
RETURNS int
WITH SCHEMABINDING
AS
BEGIN

    -- Declare the return variable here
    DECLARE @Img_ID int

    SET @Img_ID = (**sql that selects image** )

    RETURN @Img_ID

END
GO

インデックス作成で見る

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER VIEW [dbo].[View_PersonSearch]
WITH SCHEMABINDING
AS
    SELECT  Person_ID,
            (**Select fields to search on**) AS SearchArea,
            dbo.GetCurrentImage(Person_ID) AS FK_Img_ID
FROM    dbo.Person
GO

CREATE UNIQUE CLUSTERED INDEX Index_Person_ID ON [View_PersonSearch](Person_ID)
GO
4

2 に答える 2

16

このページによると:

インデックス付きビューで参照されるすべての関数は決定論的である必要があります。決定論的関数は、同じ引数で呼び出されるたびに同じ値を返します。

GetCurrentImage は、そのパラメーターに関して決定論的ではありません。選択を使用します。つまり、データが変化すると結果が変化する可能性があります。したがって、それを使用するビューにはインデックスを作成できません。

于 2009-03-10T18:48:06.857 に答える