Kann nicht Index auf Sicht mit Benutzerdefinierte Funktion in SQL Server erstellen
-
08-07-2019 - |
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
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