पर मनमानी तालिका को रूपांतरित करने के लिए SQL सर्वर क्वेरी को बेहतर बनाने के लिए वेब पर मौजूद एक्सएमएल और .nodes() कमांड का उपयोग करके परिणाम सेट को परिवर्तित करने के लिए बहुत ही उत्कृष्ट तकनीकों को एक साथ खोज और पाई जाने के बाद, मैं बनाने में सक्षम था यह एकल क्वेरी (संग्रहीत प्रक्रिया नहीं है) जो किसी भी मनमानी SQL क्वेरी को JSON सरणी में परिवर्तित करने का एक उचित काम है।जेएसओएन
क्वेरी प्रत्येक डेटा पंक्ति को एक अग्रणी कॉमा के साथ एक JSON ऑब्जेक्ट के रूप में एन्कोड करेगा। डेटा पंक्तियां ब्रैकेट द्वारा लिपटे हैं और पूरे परिणाम सेट को तब फ़ाइल में निर्यात करने की उम्मीद है।
मैं देखना चाहता हूं कि कोई भी इसके प्रदर्शन को बेहतर बनाने के तरीके देख सकता है?
यहां नमूने तालिका के साथ क्वेरी है:
declare @xd table (col1 varchar(max), col2 int, col3 real, colNull int)
insert into @xd
select '', null, null, null
UNION ALL select 'ItemA', 123, 123.123, null
UNION ALL select 'ItemB', 456, 456.456, null
UNION ALL select '7890', 789, 789.789, null
select '[{}'
UNION ALL
select ',{' + STUFF((
(select ','
+ '"' + r.value('local-name(.)', 'varchar(max)') + '":'
+ case when r.value('./@xsi:nil', 'varchar(max)') = 'true' then 'null'
when isnumeric(r.value('.', 'varchar(max)')) = 1
then r.value('.', 'varchar(max)')
else '"' + r.value('.', 'varchar(max)') + '"'
end
from rows.nodes('/row/*') as x(r) for xml path(''))
), 1, 1, '') + '}'
from (
-- Arbitrary query goes here, (fields go where t.* is, table where @xd t is)
select (select t.* for xml raw,type,elements XSINIL) rows
from @xd t
) xd
UNION ALL
select ']'
इसके बारे में मेरे सबसे बड़ी आलोचना यह है कि यह पागलपन की हद तक धीमी है है।
वर्तमान में ~ 42,000 पंक्तियों के लिए लगभग 3:30 लगते हैं।
मेरी दूसरी बड़ी आलोचना यह है कि वर्तमान में यह मानता है कि संख्या की तरह दिखने वाली हर चीज एक संख्या है। यह कॉलम प्रकार को कम से कम खोजने की कोशिश नहीं करता है (और मुझे यह भी यकीन नहीं है कि यह कर सकता है)।
अंतिम मामूली आलोचना यह है कि पहली डेटा पंक्ति में कॉमा ऊपर और तकनीकी रूप से नहीं होना चाहिए। इसके लिए क्षतिपूर्ति करने के लिए जेएसओएन सरणी शुरू करने वाली पहली पंक्ति में खाली JSON ऑब्जेक्ट की आवश्यकता होती है।
अन्य आलोचकों (अधिमानतः समाधान के साथ) आमंत्रित किया गया है, मेरे पास एकमात्र वास्तविक सीमा है कि समाधान कॉलम नामों को स्पष्ट रूप से पहचानने के बिना कई मनमानी SQL क्वेरी पर समाधान को दोहराया जा सकता है।
मैं एसक्यूएल सर्वर का उपयोग कर रहा 2012
धन्यवाद और मेरे जैसे किसी और को जो के लिए एक सामान्यीकृत एसक्यूएल परिणाम देख रहा था करने के लिए -> JSON सारणी कनवर्टर, आनंद!
जबकि मैं अपने एसक्यूएल फू सराहना, मैं पूछने के लिए है? असली दुनिया में परिदृश्य क्या है जहां आपको ऐसा करने की ज़रूरत है? मैं यहाँ नकारात्मक होने की कोशिश नहीं कर रहा हूं, सिर्फ इतना परेशान है कि आपको इसकी आवश्यकता क्यों है। –
इस मामले में मैं बहुत सारे बुनियादी ढांचे का निर्माण किए बिना या मेरे उत्पादन एसक्यूएल वातावरण में कुछ भी जोड़ने के बिना कोच डीबी जैसे नोएसक्यूएल डेटाबेस में परिणाम सेट को तेज़ी से लोड करने के लिए एक विज्ञापन-प्रसार तरीका ढूंढ रहा हूं। मोंगो, सोफे, एट अल। डेटा ट्रांसपोर्ट के लिए जेएसओएन को उनके लिंगुआ फ्रैंका के रूप में उपयोग करने लगते हैं। एक बार नोएसक्यूएल डीबी में हम डेटासेट को स्लाइसिंग और डाइसिंग के साथ प्रयोग कर सकते हैं ताकि वे यह देख सकें कि वे कैसा प्रदर्शन करते हैं। रिमोट डेस्कटॉप, लैपटॉप, स्मार्टफोन इत्यादि पर स्थानीय भंडार बनाने के लिए कॉच डीबी डेटाबेस को दोहराना एक एसक्यूएल प्रतिकृति आधारभूत संरचना के प्रबंधन से आसान है। तो हम कुछ उचित परिश्रम कर रहे हैं। –
और चलिए यहां बहुत बेवकूफ नहीं बनते हैं, जिनमें से अधिकांश मौजूदा एसक्यूएल के लिए JSON और SQL को कुंजी/मूल्य जोड़ी उत्तरों के लिए खोज कर पाया जाता है।हां, मैंने इसे एक साथ रखा है, यूनियन ऑल के माध्यम से इसके चारों ओर कुछ ब्रैकेट रखे हैं, उद्धरणों को थोड़ा अधिक समझने के लिए एक केस स्टेटमेंट का इस्तेमाल किया, और XSINIL चीज़ के साथ प्रयास करना शुरू किया (और शायद मैंने यह भी सीखा कि यह वास्तव में कैसे काम कर रहा है;)) लेकिन मैं वास्तव में इसके लिए क्रेडिट नहीं ले सकता। एकमात्र चीज के बारे में मैंने जो कुछ किया था, उसके बारे में ऊपरी क्वेरी को कुंजी/मूल्य जोड़े में बदलने से पहले प्रत्येक पंक्ति को एक्सएमएल डेटासेट के रूप में वापस करने के लिए नीचे की उप क्वेरी को गठबंधन किया गया था। –