2010-12-14 13 views
26

मैं पूछने के लिए क्षमा चाहता हूं कि थके हुए प्रश्न की तरह क्या लगता है, लेकिन मैंने जो फोरम प्रतिक्रिया या दस्तावेज पढ़ा है, वह पर्याप्त उत्तर प्रदान करता है।एमएस एसक्यूएल सर्वर पंक्ति GUID कॉलम

एमएस एसक्यूएल सर्वर 2008 में Row GUID Column संपत्ति का उद्देश्य क्या है?

मुझे उस पर विस्तार करने दें। मैंने देखा है कि "इस प्रश्न के उत्तर के रूप में GUID का उपयोग न करें", जो कि मेरे लिए पूरी तरह से असंबंधित प्रतीत होता है। अगर मैं Row GUID Column सेट करता हूं तो क्या यह GUID कॉलम प्राथमिक कुंजी या कुछ होने के लिए मजबूर कर रहा है?

मेरे मूल प्रश्न को फिर से लिखने के लिए: यदि मेरे पास मेरी तालिका में एक GUID कॉलम है जो अनुक्रमण में कोई भूमिका नहीं निभाता है, तो क्या मैं GUID कॉलम को Row GUID Column के रूप में सेट करने से कुछ हासिल करने के लिए खड़ा हूं?

उत्तर

33

यह आपको कॉलम नाम के बजाय $ ROWGUID चर का उपयोग करने में सक्षम बनाता है। इसका उपयोग अधिकतर विलय प्रतिकृति के लिए किया जाता है। यह पीके के लिए GUID कॉलम को मजबूर नहीं करता है, आप केवल पीके को स्पष्ट रूप से घोषित कर सकते हैं। आपके अंतिम प्रश्न का उत्तर नहीं है, जब तक कि आप मर्ज प्रतिकृति को कार्यान्वित करने की योजना नहीं बनाते।

+0

तो स्पष्ट, संक्षिप्त, सभी को धन्यवाद> _ <मुझे आश्चर्य है कि मुझे इस प्रश्न का उत्तर नहीं मिला अन्यत्र (बल्कि, सभी असंबद्ध चर्चाएं अन्य मंचों पर वैध प्रतिक्रियाओं पर बादल लगती थीं) आपकी मदद के लिए धन्यवाद! – instantmusic

+1

अच्छा। और केवल FYI, SQL Server 2012 से शुरू होने पर, इसका उपयोग [FILESTREAM] (https://msdn.microsoft.com/en-us/library/gg471497.aspx) कार्यक्षमता के लिए भी किया जाता है :-)। –

1

रोवैल कॉलम प्रतिकृति के लिए उपयोग किया जाता है। यह प्रतिकृति इंजन को सही ढंग से विलय करने की अनुमति देता है। जब प्रतिकृति सक्षम होती है तो यह कॉलम उन तालिकाओं में जोड़ा जाएगा जिनके पास पहले से RowGUID कॉलम नहीं है।

जब तक आप प्रतिकृति लागू करने की योजना बना रहे हैं, तब तक आप इसका उपयोग करके कुछ हासिल नहीं करेंगे। यह कॉलम के लिए डिफ़ॉल्ट मान के रूप में newsequentialid() को सेट करने के बराबर है।

0

यह प्राथमिक कुंजी होने के लिए मजबूर नहीं है, यह संपत्ति केवल यह निर्धारित करती है कि फ़ील्ड स्वचालित रूप से अपडेट हो जाएगा या नहीं। यदि आप एप्लिकेशन में GUID बनाना चाहते हैं और इसे भेजना चाहते हैं, तो इस प्रॉपर्टी को गलत पर सेट करें, अन्यथा इसे सत्य पर सेट करें और डेटाबेस को स्वचालित रूप से बनाएं। यदि फ़ील्ड क्लस्टर्ड इंडेक्स है तो सुनिश्चित करें कि डिफ़ॉल्ट मान NEWSEQUENTIALID() है।

7

ROWGUIDCOLUMN मुख्य रूप से प्रतिकृति परिदृश्यों में उपयोग किया जाता है जहां आपको कई उपग्रह डेटाबेस की तालिकाओं को एक केंद्रीय डीबी में संयोजित करने की आवश्यकता होती है।

दोहराए जाने वाले तालिकाओं में ROWGUIDCOLUMN जोड़ना सुनिश्चित करता है कि प्रतिकृति इंजन ROWGUIDCOLUMN फ़ील्ड का उपयोग उसी प्राथमिक कुंजी मानों के साथ रिकॉर्ड के बीच अंतर करने के लिए कर सकता है।

क्योंकि यह मुख्य रूप से चिकनी प्रतिकृति सुनिश्चित करने के लिए उपयोग की जाने वाली एक विशेषता है, तो आपको इस कॉलम को अपनी प्राथमिक कुंजी के रूप में उपयोग करने से बचना चाहिए। आपकी प्राथमिक कुंजी एक तार्किक व्यावसायिक इकाई होनी चाहिए जो आपके नियंत्रण में है और जो आपके चुने हुए डीबी इंजन की विशिष्ट विशेषताओं की परिचालन विशेषताओं को प्रभावित नहीं करती है।

+0

शानदार स्पष्टीकरण! –

+0

बहुत धन्यवाद। खुशी है कि यह समझ में आया :) –

+0

रिच (और @ जेफरी): कॉलम को 'ROWGUIDCOL' _ensure_' के रूप में चिह्नित करने का तरीका कैसे है कि प्रतिकृति इंजन ROWGUIDCOLUMN फ़ील्ड का उपयोग उसी प्राथमिक कुंजी मानों के साथ रिकॉर्ड के बीच अंतर करने के लिए कर सकता है "जब यह गारंटी नहीं देता है विशिष्टता?हां, डिफ़ॉल्ट रूप से मूल्य लगभग हमेशा अद्वितीय होगा, लेकिन कुछ भी अनन्य इंडेक्स/बाधा जोड़ने के बाहर मैन्युअल रूप से डुप्लिकेट मान जोड़ना रोकता है। –

0

नहीं, यह इसे पीके के रूप में मजबूर नहीं करता है। इसका मतलब यह है कि आप दूसरा अनूठा पहचानकर्ता नहीं बना सकते हैं और निर्दिष्ट करते हैं कि पंक्ति GUID कॉलम

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