je la fonction définie par l'utilisateur suivant:Sql Server déterministe fonction définie par l'utilisateur
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
Je ne peux pas créer un index sur une colonne calculée en utilisant cette fonction parce que ce n'est pas déterministe. Quelqu'un pourrait expliquer pourquoi n'est-il pas déterministe et éventuellement comment le modifier pour le rendre déterministe? Merci
J'ai créé mon index pointant vers la colonne calculée. J'ai aussi une vue qui se réfère à ma table. Je pense que je dois aussi spécifier SchemaBinding sur la vue pour créer un index sur la même colonne. A ce propos, si ma table de base en tant qu'index sur la colonne calculée est redondante, créez un autre index sur la vue? – opaera
@opaera - Oui - Vous n'avez pas non plus besoin d'indexer cette colonne dans la vue. –
Une dernière question, si vous le pouvez. J'ai un sp qui fait une requête sur la vue (la vue référençant ma table indexée). Je peux/dois spécifier le nom de l'index dans la requête de la clause? par exemple. Sélectionnez * De MyView (avec MyTableIndex) ... Peut-être que j'ai quelques avantages à faire cela? – opaera