Mam następujący zdefiniowanej przez użytkownika funkcji:SQL Server deterministyczny zdefiniowana przez użytkownika funkcja
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
Nie mogę utworzyć indeks na kolumnie obliczone z wykorzystaniem tej funkcji, bo to nie jest deterministyczny. Ktoś może wyjaśnić, dlaczego nie jest on deterministyczny, a ostatecznie jak go zmodyfikować, aby stał się deterministyczny? Dzięki
tworzę indeks wskazujący na kolumnie komputerowej. Mam również widok, który odnosi się do mojego stołu. Myślę, że muszę również określić SchemaBinding w widoku również, aby utworzyć indeks w tej samej kolumnie. O tym, jeśli moja tabela podstawowa jako indeks w kolumnie obliczeniowej jest zbędna, należy utworzyć inny indeks w widoku? – opaera
@opaera - Tak - Nie trzeba również indeksować tej kolumny w widoku. –
Ostatnie pytanie, jeśli możesz. Mam sp, który tworzy zapytanie w widoku (widok odwołujący się do mojej tabeli indeksowanej). Mogę/powinienem podać nazwę indeksu do klauzuli query from? na przykład Wybierz * From MyView (With MyTableIndex) ... Może mam jakieś korzyści z tego powodu? – opaera