Tidak mungkin menambahkan indeks pada kolom yang dihitung, kecuali jika bersifat deterministik.
"Fungsi deterministik selalu mengembalikan hasil yang sama setiap kali dipanggil dengan sekumpulan nilai input tertentu dan diberi status database yang sama. Fungsi nondeterministik dapat mengembalikan hasil yang berbeda setiap kali dipanggil dengan set nilai input tertentu bahkan jika database menyatakan bahwa mereka mengakses tetap sama."
Contoh:
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
Anda harus menentukan PERSISTED
untuk tipe data yang tidak tepat seperti [real]
dan [float]
, dalam kasus lain Anda dapat dengan bebas membuat indeks pada tampilan dengan kolom yang dihitung ([desimal] tidak masalah).