Ich habe die folgende benutzerdefinierte Funktion:SQL Server-deterministische benutzerdefinierte Funktion
create function [dbo].[FullNameLastFirst]
(
@IsPerson bit,
@LastName nvarchar(100),
@FirstName nvarchar(100)
)
returns nvarchar(201)
as
begin
declare @Result nvarchar(201)
set @Result = (case when @IsPerson = 0 then @LastName else case when @FirstName = '' then @LastName else (@LastName + ' ' + @FirstName) end end)
return @Result
end
Ich kann keinen Index für eine berechnete Spalte erstellen mit dieser Funktion Ursache es nicht deterministisch ist. Jemand könnte erklären, warum ist es nicht deterministisch und schließlich, wie man es ändert, um es deterministisch zu machen? Danke
Ich habe meine Index auf die berechnete Spalte zeigt erklären. Ich habe auch eine View, die sich auf meinen Tisch bezieht. Ich denke, ich muss auch SchemaBinding auf der Ansicht angeben, um einen Index für dieselbe Spalte zu erstellen. Wenn meine Basistabelle als Index für die berechnete Spalte redundant ist, erstellen Sie einen anderen Index in der Ansicht? – opaera
@opaera - Ja - Sie müssten diese Spalte auch nicht in der Ansicht indizieren. –
Eine letzte Frage, wenn Sie können. Ich habe eine SP, die eine Abfrage auf die Ansicht (die View, die auf meine indizierte Tabelle verweist) macht. Ich kann/sollte den Indexnamen in der Abfrage von Klausel angeben? z.B. Wählen Sie * aus MyView (mit MyTableIndex) ... Vielleicht habe ich einige Vorteile dabei? – opaera