वापस करने के लिए SQL का उपयोग करें यह एक "सर्वोत्तम अभ्यास" प्रश्न है। हम इस विषय पर आंतरिक चर्चा कर रहे हैं और व्यापक दर्शकों से इनपुट प्राप्त करना चाहते हैं।एक JSON स्ट्रिंग
मुझे सामान्य डेटा और पंक्तियों के साथ पारंपरिक MS SQL Server
तालिका में अपना डेटा स्टोर करने की आवश्यकता है। मुझे कभी-कभी अपने वेब एप्लिकेशन में DataTable
वापस करने की आवश्यकता होती है, और दूसरी बार मुझे JSON
स्ट्रिंग वापस करने की आवश्यकता होती है।
वर्तमान में, मैं तालिका को मध्यम परत पर वापस कर देता हूं और इसे JSON
स्ट्रिंग में पार्स करता हूं। यह अधिकांश भाग के लिए अच्छी तरह से काम करता प्रतीत होता है, लेकिन कभी-कभी बड़े डेटासेट पर कुछ समय लगता है (डेटा को पार्स कर रहा है, टेबल वापस नहीं कर रहा है)।
मैं DataTable
या JSON
स्ट्रिंग को चुनिंदा रूप से वापस करने के लिए संग्रहीत प्रक्रियाओं को संशोधित करने पर विचार कर रहा हूं। मैं बस एसपी को @isJson bit
पैरामीटर जोड़ दूंगा।
उपयोगकर्ता स्ट्रिंग तालिका के बजाय सपा इस तरह एक प्रश्न पर अमल चाहते थे, तो:
DECLARE @result varchar(MAX)
SELECT @result = COALESCE(@results ',', '') + '{id:"' + colId + '",name:"' + colName + '"}'
FROM MyTable
SELECT @result
यह निम्नलिखित की तरह कुछ का उत्पादन:
{id:"1342",name:"row1"},{id:"3424",name:"row2"}
बेशक
, उपयोगकर्ता कर सकते हैं @isJson पैरामीटर को झूठ बोलकर टेबल भी प्राप्त करें।
मैं स्पष्ट होना चाहता हूं कि डेटा संग्रहण प्रभावित नहीं है, न ही मौजूदा दृश्यों और अन्य प्रक्रियाओं में से कोई भी है। यह केवल कुछ संग्रहीत प्रक्रियाओं के परिणामों में बदलाव है।
मेरे प्रश्न हैं:
- किसी को भी एक बड़ी आवेदन में यह करने की कोशिश की है? यदि हां, तो परिणाम क्या था?
- आपने इस दृष्टिकोण के साथ क्या समस्याएं देखी हैं/क्या आप उम्मीद करेंगे?
- क्या इस तरह से संग्रहीत प्रक्रिया को संशोधित करने या मध्य स्तर में स्ट्रिंग को पार्स करने के अलावा SQL सर्वर में तालिका से JSON में जाने का कोई बेहतर तेज़ तरीका है?
मध्यम परत के बारे में हमें और बताएं। यह इतना लंबा क्या ले रहा है? क्या यह संकलित कोड है? एक ऐसा एप्लिकेशन लिखना बहुत संभव होना चाहिए जो एक रिकॉर्डसेट को जेएसओएन में बदल देता है और इसमें पर्याप्त प्रदर्शन है। – ErikE
मान लीजिए कि आप अपने विशेष पात्रों से ठीक से बचते हैं, यह करने योग्य है ... लेकिन ... आप क्यों? एसक्यूएल सर्वर एक भयानक स्ट्रिंग पार्सिंग इंजन है, और आपके पास एक अंतर्निहित एक्सएमएल इंजन है जो हमेशा अनुरूप एक्सएमएल को अपेक्षाकृत कुशल तरीके से थूक सकता है। –
@EricE अधिकांश टेबल जेसन को बहुत जल्दी कनवर्ट करते हैं। यह केवल इसलिए हुआ क्योंकि हम फुल कैलेंडर के लिए एक टेबल पार्स कर रहे हैं। मध्य पार्स बस तालिका लेता है और स्ट्रिंग बनाने के लिए फ़ील्ड और पंक्तियों के माध्यम से चक्र के लिए एक foreach का उपयोग करता है। हम इसे तेजी से प्रदर्शन करने के लिए मध्य में कुछ चीजों को ठीक कर सकते हैं, लेकिन अगर हम एसक्यूएल करते हुए प्रक्रिया में एक अतिरिक्त कदम से बच सकते हैं ... क्यों नहीं? – davids