कंगना ने जो लिंक प्रदान किया है, वह आपको दिखाएगा कि यदि आप कॉलम के नामों को पहले से जानते थे तो इसे कैसे दूर किया जाए। स्टेटमेंट बनाने के लिए डायनेमिक SQL का उपयोग करने के अलावा, हम उसी लॉजिक के लिए जा रहे हैं। प्रत्येक फ़ील्ड में 2 भाग होते हैं जिन्हें आपको शामिल करने की आवश्यकता होती है, चयन कथन में फ़ील्ड और मान प्राप्त करने के लिए एक उपयुक्त जुड़ाव ... इसलिए हमें दो भागों में कथन बनाने की आवश्यकता होगी
इसे बनाने के लिए पहले 3 चर घोषित करें ... मैं इस उदाहरण के लिए @select, @join, और @sql के साथ जाऊंगा। चरों को प्रारंभिक मान दें
set @select = 'select user_id,'
set @join = 'from table t'
अब टेबल.की फ़ील्ड में अलग-अलग मानों के साथ एक कर्सर घोषित करें और लोड करें। मैं @field का उपयोग करने जा रहा हूं क्योंकि चर अलग-अलग table.key फ़ील्ड के साथ पॉप्युलेट हो जाता है। फिर इसके माध्यम से दो चरों का निर्माण करते हुए लूप करें:
set @select = @select + ', ' + @field + '.value as '[email protected]+'
set @join = @join + ' left join table ' + @field + 'on '[email protected]+'.key = t.key and and '[email protected]+'.user_id = t.user_id
(जॉइन को टेबल के उपनाम के रूप में @field में मान का उपयोग करने के लिए डिज़ाइन किया गया है)
अपने कर्सर के माध्यम से लूप @select और @join का निर्माण करें। लूप के अंत में:
set @sql = @select + @join + 'where clause if you want'
exec @sql
इस तरह बनाया गया डायनामिक एसक्यूएल समस्या निवारण (और सही हो जाना) और सुरक्षा मुद्दों को खोलने के लिए एक पूर्ण दर्द हो सकता है ... लेकिन यह एकमात्र तरीका है जिसे मैं इसे पूरा कर सकता हूं। अपने चरों पर आकार प्रतिबंधों के लिए देखें .... यदि आपके पास बहुत अधिक विशिष्ट कुंजी हैं, तो चर बहुत बड़े हो जाते हैं। क्षमा करें, मैं इस पर छद्म के साथ अधिक सटीक नहीं हो सकता ... आप पाएंगे कि एसक्यूएल में गतिशील एसक्यूएल बनाना श्रमसाध्य है।