2008-12-09 6 views
8

मेरे पास एक संग्रहित प्रक्रिया है जिसे spGetOrders कहा जाता है जो कुछ पैरामीटर स्वीकार करता है: @startdate और @enddate। यह एक "ऑर्डर" तालिका से पूछताछ करता है। तालिका में कॉलम में से एक को "बंद दिनांक" कहा जाता है। यदि कोई ऑर्डर बंद नहीं हुआ है या दिनांक मूल्य है तो यह कॉलम न्यूल रखेगा। मैं एक @ बंद पैरामीटर जोड़ना चाहता हूं जो थोड़ा सा मूल्य लेगा। एक साधारण दुनिया में, मैं ऐसा करने में सक्षम हो जाएगा ..एसक्यूएल सशर्त जहां

select * from orders o 
where o.orderdate between @startdate AND @enddate 
and (if @Closed = 1 then o.ClosedDate IS NULL else o.ClosedDate IS NOT NULL) 

जाहिर है, कि काम करने के लिए .. मैं भी गतिशील एसक्यूएल जो मेरे अंतिम उपाय है पर देख रहा हूँ नहीं जा रहा है, लेकिन तरह देखने के लिए शुरू कर इस सवाल का जवाब ..

कृपया मदद ..

उत्तर

14

इस प्रयास करें:

select * from orders o 
where o.orderdate between @startdate AND @enddate 
and ((@Closed = 1 And o.ClosedDate IS NULL) Or (@Closed = 0 And o.ClosedDate IS NOT NULL)) 

जहां खंड में और एंड और मिश्रण के बारे में सावधान रहें। ऐसा करने पर, मूल्यांकन के आदेश को नियंत्रित करने के लिए कोष्ठक बहुत महत्वपूर्ण है।

+1

यह समस्या ठीक करने का एक शानदार तरीका है। इस दृष्टिकोण के लिए धन्यवाद! – Noah

2

एसक्यूएल कथन:

SELECT * 
FROM orders 
WHERE orderdate BETWEEN @startdate AND @enddate 
AND (@Closed = 1 OR CLosedDate IS NOT NULL) 
+1

अपने और/या मुद्दों से सावधान रहें - आप कोष्ठकों की जरूरत है! –

0

या इस:

select * from orders o 
where o.orderdate between @startdate AND @enddate 
and ( (@Closed = 1 AND o.ClosedDate IS NULL) 
    OR (ISNULL(@Closed, 0) <> 1 AND o.ClosedDate IS NOT NULL) 
    ) 

ऐसा लगता है कि दो तिथियों है कि असंगत बंद जानकारी के बीच सभी आदेशों चाहते हैं। अन्य सुझाव शायद अच्छे (या बेहतर) हैं, लेकिन मुझे पूरा यकीन है कि यह काम करता है और मेरे लिए पठनीय है (अन्य सुझावों में से अधिकांश दिखाई दे रहे थे)।

शुभकामनाएं!

0

मूल रूप से, इसे लिखें।

select * from orders o 
where o.orderdate between @startdate AND @enddate 
and ((@Closed = 1 and o.ClosedDate IS NULL) 
    or (@Closed != 1 and o.ClosedDate IS NOT NULL)) 

डबल, हटाया जा सकता है

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

  • कोई संबंधित समस्या नहीं^_^