2009-03-10 15 views
6

In SQL Server 2005, sto tentando di utilizzare una funzione definita dall'utente in una vista indicizzata che verrà utilizzata in un indice full-text. Sono stato in grado di far funzionare l'UDF con una stored procedure e la vista in questione. Ma, quando cerco di creare un indice sulla vista ottengo il seguente errore ...Impossibile creare indice sulla vista con la funzione definita dall'utente in SQL Server

Impossibile creare l'indice sulla vista "DevDatabase.dbo.View_PersonSearch" perché la funzione "dbo.GetCurrentImage" a cui fa riferimento la vista esegue utente o accesso ai dati di sistema.

Sono perplesso da questo. Di seguito è riportato un esempio di ciò che sto cercando di fare. Mi sto perdendo qualcosa o è anche possibile?

User Defined Function

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 

View con la creazione dell'indice

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 

risposta

12

Secondo this page:

Le funzioni cui si fa riferimento in un indicizzatoLa vistadeve essere deterministica; Le funzioni deterministiche restituiscono lo stesso valore ogni volta che vengono invocati con gli stessi argomenti.

GetCurrentImage non è deterministico in relazione ai suoi parametri: utilizza una selezione, il che significa che i risultati potrebbero cambiare con la modifica dei dati, pertanto non è possibile indicizzare alcuna vista che la utilizza.

+0

ahhh ... ho capito ora. Grazie per averlo portato alla luce per me. – Eddie

+1

Quindi qual è la soluzione? –

+0

Anche io vorrei sapere come hai superato questo problema. – Jeremy

Problemi correlati