मान लें कि मेरे पास एक्सेल में निम्नलिखित कॉलम हैं: स्तर, समूह, कोड, नाम, तिथि, निम्नलिखित मूल्यों के साथ अतिरिक्त जानकारी:
1, ए, 1234, जॉन, 2019-09-01, जानकारी 1
1, ए, 1234, जॉन, 2019-09-01, जानकारी 2

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

मान लें कि उपरोक्त उदाहरण में, एक रिकॉर्ड के लिए समूह या तिथि बदल दी जाएगी। तर्क को कैसे कार्यान्वित करें, जो डीबी में सही रिकॉर्ड अपडेट करता है।

2
Ziil 26 सितंबर 2019, 14:17
कृपया अपना कोड प्रदान करें और इसे प्राप्त करने के लिए आपने क्या किया है?
 – 
Zac
26 सितंबर 2019, 14:57
इस शीर्षक को पढ़कर मेरा दम घुट गया। बस इसे एक स्टेजिंग टेबल में डंप करें और वहां अपना काम करें। डेटाबेस के रूप में एक्सेल का उपयोग न करें। इसके लिए यह बुरा है।
 – 
Jacob H
26 सितंबर 2019, 19:30

2 जवाब

यदि कोई अद्वितीय प्राथमिक कुंजी नहीं है, तो आप एक विशिष्ट डेटासेट प्राप्त करने में सक्षम नहीं होंगे। ऐसी प्राथमिक कुंजी के बिना आप केवल एक पंक्ति को अपडेट नहीं कर पाएंगे, बल्कि एक या अधिक समान पंक्तियों को अपडेट कर पाएंगे। वर्तमान स्थिति में, परिवर्तनों को सटीक रूप से ट्रैक करना संभव नहीं है।

यदि आपके पास एक अद्वितीय प्राथमिक कुंजी है, तो सबसे आसान उपाय यह होगा कि परिवर्तनों को ट्रैक करने के तरीके के रूप में डेटाटाइम को जोड़ा जाए और किसी भी मान में परिवर्तन होने पर इसे एक नई पंक्ति के रूप में जोड़ा जाए। आपका डेटासेट इस तरह दिखेगा:

1, A, 1234, John, 2019-09-01, Info1, DateCreated, DateChanged
1, A, 1234, John, 2019-09-01, Info2, DateCreated, DateChanged2
1, A, 1234, John, 2019-09-01, Info3, DateCreated, DateChanged3

यह याद रखना महत्वपूर्ण है कि यह केवल एक स्थिर प्राथमिक कुंजी के साथ काम करता है, कुछ फ़ील्ड जो आमतौर पर समग्र कुंजी के लिए उपयोग की जाती हैं, काम नहीं कर सकती हैं। उपयोगकर्ता अपना नाम बदल सकते हैं या गलत तरीके से दर्ज की गई जन्मतिथि को सुधार सकते हैं जो कुछ मिश्रित कुंजियों को बदल सकती है।

एसएसआईएस में इसे दो लुकअप कार्यों का उपयोग करके कार्यान्वित किया जाएगा:

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

इन तीन शाखाओं के विकल्पों में हर संभावित स्थिति का हिसाब होना चाहिए: नया रिकॉर्ड, बिना किसी बदलाव के मौजूदा रिकॉर्ड, परिवर्तनों के साथ मौजूदा रिकॉर्ड

0
PausePause 26 सितंबर 2019, 18:44

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

Level + "|" + Code + "|" + Name + "|" + Additional info

फिर मैं उस व्युत्पन्न कॉलम के आधार पर स्रोत डेटा और मौजूदा डेटा की तुलना करूंगा। आप इन व्युत्पन्न कॉलम को गंतव्य डेटाबेस में संग्रहीत करना चुन सकते हैं या आप इन मानों को संग्रहीत करने के लिए एक स्टेजिंग तालिका का उपयोग कर सकते हैं।

0
Hadi 27 सितंबर 2019, 07:11