2009-03-10 4 views
6

SQL Server 2005에서 전체 텍스트 인덱스에서 사용할 인덱싱 된 뷰에서 사용자 정의 함수를 사용하려고합니다. UDF를 저장 프로 시저 및 문제의 뷰로 작업 할 수있게되었습니다. 나는 다음과 같은 오류가 뷰에 인덱스를 ... 만들려고 할 때,SQL Server에서 사용자 정의 함수를 사용하여보기에 인덱스를 만들 수 없습니다.

는 는

보기 "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 

답변

12

따르면 this page에 :,536 색인에서 참조

모든 기능뷰가 결정적이어야합니다. deterministic 함수는 동일한 인수를 사용하여 을 호출 할 때마다 동일한 값을 반환합니다.

GetCurrentImage는 매개 변수에 대해 결정적 아니다 - 그래서를 사용하는 뷰 인덱싱 될 수 없다 -는 결과 데이터의 변경시 변경 될 수있는 것을 의미하는 선택을 사용한다.

+0

아 ... 이제 알겠습니다. 저를 위해 빛을 가져 주셔서 감사합니다. – Eddie

+1

그래서 해결책은 무엇입니까? –

+0

나는 또한이 문제를 어떻게 극복했는지 실제로 알고 싶습니다. – Jeremy

관련 문제