Không thể thêm chỉ mục trên một cột được tính toán, trừ khi nó mang tính xác định.
"Các hàm xác định luôn trả về cùng một kết quả bất kỳ khi nào chúng được gọi với một tập giá trị đầu vào cụ thể và được cung cấp cùng một trạng thái của cơ sở dữ liệu. Các hàm không xác định có thể trả về các kết quả khác nhau mỗi khi chúng được gọi với một tập giá trị đầu vào cụ thể ngay cả khi trạng thái cơ sở dữ liệu mà họ truy cập vẫn như cũ. "
Ví dụ:
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
Bạn phải chỉ định PERSISTED
cho các loại dữ liệu không chính xác như [real]
và [float]
, trong trường hợp khác, bạn có thể thoải mái tạo chỉ mục trên dạng xem có cột được tính toán ([số thập phân] sẽ được).