Frage

In SQL Server 2005, Ich versuche, eine benutzerdefinierte Funktion in einer indizierten Sicht zu verwenden, die in einem Volltextindex verwendet werden. Ich konnte die UDF bekommen mit einer gespeicherten Prozedur und der Ansicht in Frage zu arbeiten. Aber, wenn ich versuche, einen Index für die Ansicht erstellen ich folgende Fehlermeldung erhalten ...

Kann nicht Index auf Sicht erstellen "DevDatabase.dbo.View_PersonSearch", weil die Funktion "dbo.GetCurrentImage" durch die Sicht verwiesen Zugriff Benutzer oder Systemdaten führt.

Ich bin von dieser stapfte. Unten ist ein Beispiel dafür, was ich zu tun versuchen. Bin ich etwas fehlt oder ist das überhaupt möglich?

Benutzerdefinierte Funktion

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

Ansicht mit der Indexerstellung

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
War es hilfreich?

Lösung

Nach Seite :

  

Jede in einer indizierten verwiesen Funktionen   Ansicht muss deterministisch;   deterministische Funktionen geben die   gleicher Wert jedes Mal, wenn sie aufgerufen sind   mit den gleichen Argumenten.

GetCurrentImage ist nicht deterministisch in Bezug auf seine Parameter - eine Auswahl verwendet, die die Ergebnisse bedeutet, wie sich die Daten ändern kann sich ändern -. So dass jede Ansicht es verwenden, können nicht indiziert werden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top