गणना किए गए कॉलम पर इंडेक्स जोड़ना असंभव है, जब तक कि यह नियतात्मक न हो।
"नियतात्मक कार्य हमेशा एक ही परिणाम लौटाते हैं जब भी उन्हें इनपुट मानों के एक विशिष्ट सेट के साथ बुलाया जाता है और डेटाबेस की एक ही स्थिति दी जाती है। नॉनडेटर्मिनिस्टिक फ़ंक्शन हर बार अलग-अलग परिणाम लौटा सकते हैं जब उन्हें इनपुट मानों के एक विशिष्ट सेट के साथ बुलाया जाता है। भले ही डेटाबेस बताता है कि वे एक्सेस करते हैं वही रहता है।"
उदाहरण:
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
आपको PERSISTED
specify निर्दिष्ट करना होगा सटीक डेटा प्रकारों जैसे [real]
. के लिए और [float]
, अन्य मामले में आप गणना किए गए कॉलम के साथ एक दृश्य पर स्वतंत्र रूप से एक इंडेक्स बना सकते हैं ([दशमलव] ठीक रहेगा)।