2010-09-14 13 views
9

मेरे पास एक SQL क्वेरी है जो बहुत ही सीमित इन-हाउस फ्रेमवर्क द्वारा पैरामीटरकृत है। क्वेरी इस तरह दिखता है: पैरामीटर:शून्य से कई पैरामीटर के साथ खंड में एसक्यूएल

Select * from somewhere 
where name IN (:parameter); 

कोड द्वारा निर्दिष्ट स्थान में कई तार करने के लिए शून्य इंजेक्षन जाएगा। "पैरामीटर" ध्वज का उपयोग केवल "इन" खंड के भीतर किया जा सकता है (इसलिए इसे क्लॉज को सशर्त रूप से 'नाम IN' में डालने के बाद स्थानांतरित नहीं किया जा सकता है) अनुभाग।

कभी कभी उपयोगकर्ता के लिए पैरामीटर सेट हो जाएगा: पैरामीटर चर:

'कुत्ता', 'बिल्ली'

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

Select * from somewhere 
where name IN(); 

मेरे कोड जहां पैरामीटर रिक्त है, लेकिन मैं जो कुछ मैं में बयान जो कभी नहीं एक वास्तविक मैच के लिए गारंटी है में इंजेक्षन कर सकते हैं की जरूरत है मामला पकड़ कर सकते हैं स्ट्रिंग।

क्या कोई एसक्यूएल नियमित अभिव्यक्ति है जिसे मैं इंजेक्ट कर सकता हूं जो किसी भी स्ट्रिंग से मेल नहीं खाएगा? कुछ%% या% की तरह ....

धन्यवाद!

+0

इसे कुछ और विचारों की आवश्यकता हो सकती है। क्वेरी मानते हुए आपकी वास्तविक क्वेरी है, आप मूल रूप से प्रत्येक रिकॉर्ड और प्रत्येक कॉलम का चयन कर रहे हैं (संभवतः बड़े, अगर इसे एक आईएन क्लॉज की आवश्यकता है) डेटाबेस तालिका, जो कि सबसे अच्छी रणनीति नहीं हो सकती है। –

+0

इसे दूसरी दिशा से देखकर, उस क्षेत्र को खाली करने के लिए उपयोगकर्ता को पृष्ठ सबमिट करने की अनुमति क्यों न दें? –

+0

@Robert - वास्तव में क्वेरी में अन्य भाग हैं; मैंने इसे स्टैक ओवरफ्लो के प्रयोजनों के लिए सरल बना दिया; हालांकि अन्य भाग नाम पैरामीटर – David

उत्तर

16

आप कह सकते हैं:

where name in (null) 

इस से मेल खाते हैं कभी नहीं होगा, कुछ भी नहीं के बाद से null के बराबर है

+1

अच्छा जवाब है, लेकिन क्यों' शून्य '' शून्य 'से मेल नहीं खाता ? – fastcodejava

+2

@fastcodejava: "नल के साथ तुलना कभी भी सही या गलत नहीं हो सकती है, लेकिन हमेशा तीसरे तार्किक परिणाम में, अज्ञात" http://en.wikipedia.org/wiki/Null_(SQL) तो 'null = null' परिणाम 'अज्ञात' में, और 'कहां' खंड केवल 'सत्य' से मेल खाता है। – Andomar

+0

निकालें (ts.triggered_at से दिन) IN (शून्य) postgresql में मेरे लिए काम नहीं करते –

0

मुझे नहीं लगता कि आप गारंटी दे सकते हैं कि आप कभी भी मौजूदा स्ट्रिंग से मेल नहीं खाएंगे। सबसे अच्छी बात यह है कि आप उस मामले को संभाल सकते हैं जिसमें स्टेटमेंट डेटाबेस पर काम नहीं करता है; हालांकि, यह जानने के बिना कि स्क्रिप्ट को कैसे निष्पादित किया जा रहा है, मैं वहां से और अधिक नहीं समझ सकता।

4

null कुछ भी साथ मेल नहीं करना चाहिए (जो खुद null भी नहीं।)।

0

नाम शून्य नहीं हो सकता है, तो आप खाली स्ट्रिंग कर सकते हैं?

संबंधित मुद्दे