É impossível adicionar índice em uma coluna computada, a menos que seja determinístico.
"Funções determinísticas sempre retornam o mesmo resultado sempre que são chamadas com um conjunto específico de valores de entrada e recebem o mesmo estado do banco de dados. Funções não determinísticas podem retornar resultados diferentes cada vez que são chamadas com um conjunto específico de valores de entrada mesmo que o banco de dados declare que eles acessam permanece o mesmo."
Exemplo:
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
Você deve especificar
PERSISTED
para tipos de dados imprecisos como [real]
e [float]
, em outro caso, você pode criar livremente um índice em uma exibição com coluna computada ([decimal] será OK).