SQL सर्वर में स्कीमा को अपने विचारों को बाँधना आमतौर पर एक अच्छा विचार है।
आपके विचार को बाध्य करने वाली स्कीमा यह सुनिश्चित करेगी कि अंतर्निहित तालिकाओं को इस तरह से नहीं बदला जा सकता है जिससे दृश्य प्रभावित हो। स्कीमा बाइंडिंग के बिना, अंतर्निहित तालिकाओं या अन्य वस्तुओं को संशोधित या हटाया भी जा सकता है। अगर ऐसा होता है, तो व्यू उम्मीद के मुताबिक काम नहीं करेगा।
स्कीमा बाउंड व्यू बनाने के लिए, WITH SCHEMABINDING
का उपयोग करें दृश्य बनाने के लिए अपने टी-एसक्यूएल कोड में।
उदाहरण
स्कीमा बाउंड व्यू बनाने का एक उदाहरण यहां दिया गया है:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GOचुनें
ध्यान दें कि मैंने अपनी क्वेरी में तालिका को संदर्भित करते समय दो-भाग के नाम का उपयोग किया था - मैंने dbo.Cats
का उपयोग किया था केवल Cats
. के बजाय . ऐसा करना किसी ऑब्जेक्ट को बाध्य करने वाले स्कीमा के लिए एक आवश्यकता है। यदि आप दो-भाग नामों का उपयोग किए बिना किसी ऑब्जेक्ट को स्कीमा बाइंड करने का प्रयास करते हैं तो आपको एक त्रुटि मिलेगी।
अब जब मैंने स्कीमा को अपने विचार के लिए बाध्य कर दिया है, यदि मैं इसकी परिभाषा में संदर्भित तालिका को छोड़ने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है:
DROP TABLE Cats;
परिणाम:
Msg 3729, Level 16, State 1, Line 1 Cannot DROP TABLE 'Cats' because it is being referenced by object 'v_Cats'.
यदि मैं दो-भागों के नामकरण का उपयोग किए बिना दृश्य को स्कीमा बाइंड करने का प्रयास करता हूं तो यहां क्या होता है:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM Cats; GO
परिणाम:
Msg 4512, Level 16, State 3, Procedure v_Cats, Line 5 Cannot schema bind view 'dbo.v_Cats' because name 'Cats' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
अन्य दृश्य विशेषताएं
एकाधिक विशेषताओं को अल्पविराम द्वारा अलग किया जा सकता है। आपको WITH
निर्दिष्ट करने की आवश्यकता नहीं है प्रत्येक विशेषता के लिए।
उदाहरण के लिए, यदि आप चाहते हैं कि दृश्य स्कीमा बाध्य हो और एन्क्रिप्टेड, आप यह कर सकते हैं:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING, ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO