SQL Serverのユーザー定義関数でビューにインデックスを作成できません
-
08-07-2019 - |
質問
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はパラメーターに関して決定的ではありません-選択を使用します。つまり、データが変更されると結果が変わる可能性があるため、それを使用するビューはインデックス付けできません。
所属していません StackOverflow