T-SQL और जहां%% पैरामीटर% खंड है


84

मैं एक कथन लिखने की कोशिश कर रहा था जिसमें WHERE LIKE '% टेक्स्ट%' क्लॉज का उपयोग किया गया है, लेकिन जब मैं पाठ के लिए एक पैरामीटर का उपयोग करने का प्रयास करता हूं तो मुझे परिणाम नहीं मिल रहे हैं। उदाहरण के लिए, यह काम करता है:

SELECT Employee WHERE LastName LIKE '%ning%'

यह उपयोगकर्ताओं को फ़्लेनिंग, मैनिंग, निंगल आदि लौटाएगा, लेकिन यह कथन नहीं होगा:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%@LastName%'

कोई परिणाम नहीं मिला। कोई सुझाव? अग्रिम में धन्यवाद।

जवाबों:


161

यह होना चाहिए:

...
WHERE LastName LIKE '%' + @LastName + '%';

के बजाय:

...
WHERE LastName LIKE '%@LastName%'

1
सवाल पर पहले की टिप के लिए धन्यवाद। हालांकि यह नहीं था। वैसे भी एक उच्च प्रदर्शन वाले उत्तर की तलाश में - यह उपयोगी है या नहीं? :)
bonCodigo

1
@bonCodigo मैं वास्तव में नहीं जानता, प्रदर्शन और अनुकूलन मेरा क्षेत्र नहीं है। इसके अलावा, ये फ़ंक्शन विक्रेता विशिष्ट हैं, आपके मामले में यह इस बात पर निर्भर करता है कि Oracle RDBMS उनका मूल्यांकन कैसे करते हैं, और मैं Oracle नहीं जानता। माफ़ करना।
महमूद गमाल

3
यह मेरे लिए काम नहीं किया। % को AddParameter अनुभाग में होना चाहिए। जेम्स
कर्रान का

2
मेरा उत्तर देखें (वर्तमान में नीचे)। वाइल्डकार्ड-प्रतीक SEARCH अभिव्यक्ति का एक हिस्सा है, न कि sql-query का हिस्सा। यह USER द्वारा दर्ज किया जाता है (या, यदि वाइल्डकार्ड-खोज पूर्वनिर्धारित है, तो उपयोगकर्ताओं को अभिव्यक्ति खोज इनपुट में जोड़ा जाता है)। आप डेटाबेस-स्तर पर स्ट्रिंग concatanation के माध्यम से संलग्न हैं, तो आप एक unreusable क्वेरी स्ट्रिंग प्राप्त
दुर्भाग्य

16

सही उत्तर यह है, क्योंकि, '%'-sign आपकी खोज अभिव्यक्ति का हिस्सा है, यह आपके VALUE का हिस्सा होना चाहिए, इसलिए जहां भी आप सेट करें @LastName(इसे प्रोग्रामिंग भाषा से या TSQL से) आपको इसे सेट करना चाहिए'%' + [userinput] + '%'

या, आपके उदाहरण में:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.