Je nemožné přidat index na vypočítaný sloupec, pokud není deterministický.
"Deterministické funkce vždy vrátí stejný výsledek, kdykoli jsou volány se specifickou sadou vstupních hodnot a mají-li stejný stav databáze. Nedeterministické funkce mohou vracet jiné výsledky pokaždé, když jsou volány s konkrétní sadou vstupních hodnot i když databáze uvádí, že jejich přístup zůstává stejný."
Příklad:
CREATE FUNCTION dbo.FuncA()
RETURNS [float]
WITH SCHEMABINDING -- required option
BEGIN
RETURN 1.0 -- DB engine parses body, and marks this func. as 'deterministic'
END
GO
CREATE TABLE TableA (
K int primary key clustered,
A AS dbo.FuncA() PERSISTED -- must be persisted
)
GO
CREATE VIEW ViewA
WITH SCHEMABINDING -- required option
AS
SELECT K, A FROM dbo.TableA
GO
CREATE UNIQUE CLUSTERED INDEX IDX1 ON dbo.ViewA (K, A)
GO
Musíte zadat PERSISTED
pro nepřesné datové typy jako [real]
a [float]
, v opačném případě můžete libovolně vytvořit index na pohledu s vypočítaným sloupcem ([desítkové] bude OK).