質問

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

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

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

ユーザー定義関数

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
役に立ちましたか?

解決

このページ

  

インデックスで参照されるすべての関数   ビューは確定的でなければなりません。   決定論的関数は   呼び出されるたびに同じ値   同じ引数を使用します。

GetCurrentImageはパラメーターに関して決定的ではありません-選択を使用します。つまり、データが変更されると結果が変わる可能性があるため、それを使用するビューはインデックス付けできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top