आप इस के लिए एक अदिश यूडीएफ इस्तेमाल कर सकते हैं लेकिन जांच की कमी में उन का उपयोग कर अच्छी तरह से समस्याओं दस्तावेज़ तैयार किया है (उदाहरण के लिए देख Scalar UDFs wrapped in CHECK constraints are very slow and may fail for multirow updates या Snapshot isolation: A threat for integrity? श्रृंखला।
यह भी डेटाबेस इंजन एक अनुक्रमित दृष्टि से इस लागू करने के लिए प्राप्त करने के लिए संभव है
इसे 2 पंक्तियों के साथ एक सहायक तालिका की आवश्यकता है क्योंकि सीटीई और UNION
अनुक्रमित विचारों में अनुमत नहीं हैं। विचार यह है कि दृश्य परिभाषा हमेशा शून्य पंक्तियों को वापस करनी चाहिए और यह उल्लंघन होने पर लौटाई गई किसी भी पंक्ति को दोगुना कर देता है। इसलिए दृश्य पर अद्वितीय बाधा का उल्लंघन और त्रुटि उत्पन्न होने और बयान विफल होने का कारण बनता है।
CREATE TABLE dbo.TwoNums
(
Num INT PRIMARY KEY
)
INSERT INTO dbo.TwoNums
VALUES (1),
(2)
तब दृश्य परिभाषा
CREATE VIEW dbo.PreventOverCapacity
WITH SCHEMABINDING
AS
SELECT V.Venueid,
E.EventId,
E.Expected,
V.Capacity
FROM dbo.Venues V
JOIN dbo.Events E
ON E.venueid = V.venueid
AND E.Expected > V.Capacity
CROSS JOIN dbo.TwoNums
और देखें पर एक अद्वितीय सूचकांक
CREATE UNIQUE CLUSTERED INDEX [UIX_PreventOverCapacity (Venueid, EventId, Expected, Capacity)]
ON dbo.PreventOverCapacity(Venueid, EventId, Expected, Capacity)
सभी चार स्तंभों सहित के लिए कारण है, ताकि सभी आवश्यक मान में दिखाए जाते हैं त्रुटि संदेश।
वस्तु 'dbo.PreventOverCapacity' अद्वितीय सूचकांक 'UIX_PreventOverCapacity (Venueid, eventID, उम्मीद, क्षमता)' के साथ में डुप्लिकेट कुंजी पंक्ति सम्मिलित नहीं कर सकते।
डुप्लिकेट कुंजी मान (1, 9 7, 110, 100) है।
हाँ , दो टेबल event_id = event_venue_id – James
पर जुड़ जाएंगे एक ट्रिगर भी इसे पूरा करेगा, लेकिन यह प्रदर्शन/अद्यतन/प्रदर्शन को प्रभावित करेगा। आप 'घटनाओं 'तालिका पर तालिका पर एक ट्रिगर बनाते हैं जो' स्थानों' तालिका की जांच करता है और एक त्रुटि/रोल वापस अमान्य मान उठाता है –