मैं एक प्रश्न एक संग्रहीत प्रक्रिया एक एकल पैरामीटर है कि में निम्नलिखित के स्वरूप के समान है:सशर्त छानने में शामिल हों
SELECT
ID,
DepartmentID,
FileName
FROM
Document
-- conditional join from here
JOIN
AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID
AND @IsAdmin = 'false'
पैरामीटर डेटा प्रकार बिट के साथ @IsAdmin
है।
मैं जिन दो टेबलों के साथ काम करता हूं वह Document
तालिका (ऊपर क्वेरी में संरचना देखें), और AllowedDepartmentList
जिसमें एक int
कॉलम है।
मैं इस क्वेरी का उपयोग Document
तालिका के आने वाले परिणामों को शामिल करने के लिए फ़िल्टर करता हूं। मैं WHERE DepartmentID IN()
खंड का उपयोग नहीं करता, क्योंकि आवंटित डिपार्टमेंटलिस्ट 600-700 आइटम (IN()
के लिए संभावित रूप से 1 एम रिकॉर्ड तालिका में अच्छे प्रदर्शन के साथ संभालने के लिए बहुत अधिक हो सकता है) तो मैं एक जॉइन का उपयोग करके फ़िल्टर करता हूं, लेकिन फ़िल्टरिंग केवल निष्पादित करें, अगर @IsAdmin पैरामीटर false
है। के बाद की लाइनों की तरह - यहां टिप्पणी से सशर्त शामिल भी वहां नहीं थे।
मैंने उपर्युक्त क्वेरी की कोशिश की लेकिन यह कोई रिकॉर्ड नहीं बनाता है। मुझे संदेह है कि मैं गलत प्रकार के शामिल होने का उपयोग कर रहा हूं, लेकिन मैं अटक गया हूं।
ध्यान दें, कि झिल्डन का सुझाव अधिक कुशल है, क्योंकि आप उन परिस्थितियों में शामिल होने से खुद को बचाएंगे जहां इसकी आवश्यकता नहीं है। हालांकि, मैं केवल एक प्रश्न रखने के आपके तर्क को समझता हूं। –
बहुत बहुत धन्यवाद, यह ठीक लगता है, मुझे इसका परीक्षण करना होगा। और हां, आप सही हैं, हमें यह भी जांचना होगा कि अतिरिक्त जुड़ने से इतने सारे ओवरहेड का कारण बनता है कि यह कोड को डुप्लिकेट करने योग्य है। – Daniel
मैंने आपका जवाब स्वीकार कर लिया है क्योंकि हमने परीक्षण उद्देश्यों के लिए इस समाधान को लागू किया है। यह आवश्यकतानुसार काम करता है और काम पूरा हो जाता है, लेकिन प्रदर्शन को मापा जाना चाहिए। बिल के अनुरूप कई अन्य उत्तर हैं, इसलिए मेरी समस्या के साथ समय निकालने वाले सभी लोगों के लिए धन्यवाद। – Daniel