टेक्स्ट या न्यूमेरिक फ़ील्ड - डेटा प्रकार स्विच करने के लिए एक सरल SQL विधि
मैंने हाल ही में एक प्रोजेक्ट पर काम किया है जहां हमारा क्लाइंट पूरे यूएसए में SQL सर्वर के साथ एक्सेस पर निर्मित उत्पाद बेच रहा है, यह SQL में डेटा आयात करके और फिर एक्सेस रिपोर्ट के साथ इसका विश्लेषण करके काम करता है। दुर्भाग्य से प्रत्येक ग्राहक के पास एक लंबे पूर्णांक के रूप में प्राथमिक कुंजी प्रारूप हो सकता है और अन्य जहां यह एक स्ट्रिंग है, (संख्याओं और तारों का संयोजन), हमने जल्दी से पाया कि रिपोर्ट सही ढंग से क्रमबद्ध नहीं होने के कारण समस्याएं उत्पन्न हुईं। रिपोर्ट को पूर्णांकों को ध्यान में रखकर तैयार किया गया था और स्ट्रिंग्स ने ऑर्डर को गड़बड़ कर दिया। हमें एक ऐसे समाधान के साथ आने की जरूरत थी जिसमें समस्या को संभालने के लिए हमारे एक्सेस फ्रंटएंड में कोड जोड़ने की आवश्यकता न हो, बल्कि प्राथमिक कुंजी पर उपयोग किए गए प्रारूप की परवाह किए बिना डेटा की सेवा के लिए SQL सर्वर की शक्ति का उपयोग करें।
बचाव के लिए दृश्य
एक्सेस में SQL सर्वर व्यू और टेबल को जोड़ने के बारे में एक साफ बात:आप उन्हें अपनी इच्छानुसार कोई भी नाम दे सकते हैं। यदि प्राथमिक कुंजी एक स्ट्रिंग है या यदि यह एक पूर्णांक था तो इसे मूल तालिका के रूप में छोड़ दें, तो मैंने इसे लिंक की गई तालिका के स्रोत से बाहर निकाला। स्रोत की परवाह किए बिना एक्सेस में समान तालिका नाम होने का मतलब मेरे कोड को बदलना नहीं है।
हम SQL सर्वर तालिका का उपयोग करके लिंकिंग ड्राइव करते हैं
जुआन ने SQL सर्वर से ड्राइविंग टेबल लिंकिंग के बारे में ब्लॉग किया है, जहां हम VBA कोड का उपयोग करके अपने एक्सेस फ्रंटएंड में लिंक बनाने के लिए tblTablePermissions नामक तालिका में रिकॉर्ड पढ़ने के लिए कोड का उपयोग करते हैं। आमतौर पर हम केवल प्रोजेक्ट की शुरुआत में या सर्वर में एक नई तालिका जोड़े जाने पर लिंक करते हैं, लेकिन इस प्रोजेक्ट के लिए मुझे टेबल नाम को tblTablePermissions में व्यू नाम के साथ स्वैप करके इसे एक कदम आगे ले जाने की आवश्यकता है यदि क्लाइंट उपयोग करता है a प्राथमिक कुंजी के लिए स्ट्रिंग।
TblTablePermissions में दो फ़ील्ड हैं, एक को Table_Name कहा जाता है और दूसरा AccessName कहा जाता है, हमारा कोड यह जानने के लिए पूर्व का उपयोग करता है कि कौन सी तालिका या दृश्य को स्रोत के रूप में उपयोग करना है और बाद में एक्सेस में तालिका नाम के लिए। मैंने केवल एक साधारण स्क्रिप्ट बनाई थी जिसे मेरा ग्राहक प्रत्येक इंस्टॉलेशन के लिए व्यू नामों के साथ टेबल नामों को स्वैप करने के लिए चला सकता है।
यहाँ वह स्क्रिप्ट है जिसका मैंने उपयोग किया है:
--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
[dbo] से हटाएं। )
GO
IINSERT INTO [dbo]।[tblTablePermissions] ([Table_Name], [Access_Name], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
VALUES ('vw_tablename1', 'tablename1', ”, 'True', 'True', 'True', 'True'),
('vw_tablename2', 'tablename2', 'field1,field2,field3 ', 'ट्रू', 'ट्रू', 'ट्रू', 'ट्रू'),
('vw_tablename3', 'tablename3', 'field1,field2', 'True', 'True', 'True', 'सच')
जाओ
उपरोक्त मेरी स्क्रिप्ट में मैं पहले tblTablePermissions से तालिकाओं को हटाता हूं जिन्हें मैं विचारों के साथ स्वैप करना चाहता हूं और फिर मैं उन विचारों को जोड़ने के लिए एक सम्मिलित कथन का उपयोग करता हूं जो तालिकाओं को प्रतिस्थापित करेंगे, ध्यान दें कि दृश्य नाम अलग हैं लेकिन Access_Name फ़ील्ड समान हैं जो प्राथमिक कुंजी फ़ील्ड प्रकार का उपयोग किए जाने पर ध्यान दिए बिना मेरे एक्सेस कोड को काम करने की अनुमति देते हुए हटा दिए गए हैं।
प्राथमिक कुंजी का अनुवाद करने के लिए मैंने CAST का उपयोग कैसे किया
दृश्य में मैंने टाइप . फ़ील्ड को कनवर्ट करने के लिए CAST फ़ंक्शन का उपयोग किया है एक स्ट्रिंग से एक पूर्णांक में:
CREATE VIEW vw_tablename1
AS
SELECT RangeID,
UseFlagAsNeeded,
CAST(Type AS int) AS Type,
Line,
Ownership,
Include,
Public,
Limit,
RangeA,
RangeB,
RangeC,
SSMA_TimeStamp
FROM dbo.tablename1;
GO
हमारा क्लाइंट अब ग्राहक के डेटा के आधार पर प्रत्येक इंस्टॉलेशन को आसानी से कॉन्फ़िगर कर सकता है!