2010-05-18 13 views
5

SQL तालिका को बाधित करने का सबसे साफ तरीका क्या है ताकि इसे एक से अधिक पंक्ति न हो?केवल एक पंक्ति रखने के लिए तालिका को रोकें

This related question चर्चा करता है कि ऐसी तालिका क्यों मौजूद हो सकती है, लेकिन बाधा को कैसे लागू किया जाना चाहिए।

अभी तक मुझे केवल एक अद्वितीय कुंजी कॉलम शामिल हैक शामिल है जो एक विशिष्ट मान के लिए बाध्य है, उदा। ALWAYS_0 TINYINT NOT NULL PRIMARY KEY DEFAULT (0) CONSTRAINT CHECK_ALWAYS_0 CHECK (ALWAYS_0 = 0)। मुझे लगता है कि ऐसा करने के लिए शायद एक क्लीनर तरीका है।

आदर्श समाधान पोर्टेबल एसक्यूएल, लेकिन एमएस एसक्यूएल सर्वर या postgres के लिए एक समाधान विशिष्ट भी

उत्तर

1

में मैं सिर्फ एक गणना स्तंभ के साथ एक मेज बनाने और उस स्तंभ पर प्राथमिक कुंजी डालकर एसक्यूएल सर्वर 2008 पर एक ही समस्या हल हो:

CREATE TABLE MyOneRowTable (
    [id] AS (1) PERSISTED NOT NULL CONSTRAINT pk_MyOneRowTable PRIMARY KEY, 
    -- rest of the columns go here 
); 
+0

इस सुविधा के बारे में नहीं पता था, धन्यवाद! – finnw

+0

मदद करने के लिए खुशी हुई। आप मूल्य को एक टिप्पणी भी बना सकते हैं, उदाहरण के लिए '[id] AS ('table_should_only_have_one_row')'। – SQB

4

स्पष्ट तरीका (मुझे लगता है कि) एक ON INSERT ट्रिगर है कि एक अपवाद फेंकता होगा उपयोगी होगा होगा (इस प्रकार की रोकथाम डालने से पंक्ति)। यह क्लाइंट ऐप को शानदार तरीके से पुनर्प्राप्त करने का मौका भी देता है।

+1

+1। मुझे यह समाधान पसंद है क्योंकि मैं एक कस्टम त्रुटि संदेश लौटा सकता हूं जो बताता है कि सम्मिलन की अनुमति क्यों नहीं है। अन्य समाधानों द्वारा उत्पन्न त्रुटि संदेश भ्रमित हो सकते हैं। – finnw

1

अनुदान उपयोग अनुमतियां निकालने के लिए किसी को भी एक पंक्ति जोड़ने के बाद तालिका में सम्मिलित करने के लिए

आपका व्यवसाय करने लेकिन डालने के लिए सक्षम हो जाएगा डीबीए केवल स्कीमा परिवर्तन जो इतनी जाँच कर रहे हैं एक समस्या नहीं होनी चाहिए चल रहा होना चाहिए अभ्यास

संबंधित मुद्दे