मैं @acc_id के मान के आधार पर किसी एक कॉलम से डेटा निकालने के लिए संग्रहीत कार्यविधि लिखने का प्रयास कर रहा हूं।

जैसा कि आप देख सकते हैं मुझे where CASE (len(acc_id) > 8 then client_id ELSE client_acc end) पर एक त्रुटि मिलती है

लेकिन मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं। मैं किसी भी सहायता के लिए बहुत आभारी रहूंगा।

create procedure test_client @acc_id nvarchar(20)
as
Select 
    client_id,
    cash_t.client_acc,
    sub_trans_type,
    settle_date,
    dbt_crt,
    cash_t.currency,
    cash_amount,
    cash_t.last_update
    From test_cash_trans as cash_t

    inner join client_crm as crm
    on cash_t.client_acc = crm.client_acc

    where crm.client_acc in (
    select  client_acc
    from client_crm
    where CASE (len(acc_id) > 8 then client_id ELSE client_acc end) 
    )
    order by crm.client_acc ASC
GO

नतीजा:

11:31:47 लाइन 104 Msg 102, लेवल 15, स्टेट 1, प्रोसीजर टेस्ट_क्लाइंट, लाइन 20 '>' के पास गलत सिंटैक्स पर क्वेरी निष्पादित करना शुरू किया। कुल निष्पादन समय: 00:00:00.010

0
Nelboy13 6 जिंदा 2021, 14:40
1
case को where क्लॉज में इस्तेमाल न करें। वैसे भी इसे क्या करना चाहिए?
 – 
juergen d
6 जिंदा 2021, 14:52
1
WHERE का कोई मतलब नहीं है। CASE में बहुत अधिक कोष्ठक हैं, लेकिन इसे ठीक करने के बाद भी, यह बूलियन व्यंजक नहीं है। CASE का व्यंजक क्या बराबर होना चाहिए? आपके पास जो होगा वह WHERE (len(acc_id) > 8 AND client_id) OR (len(acc_id) <= 8 AND client_acc) कहने जैसा होगा। AND client_id क्या?
 – 
Larnu
6 जिंदा 2021, 14:55
आप CASE व्यंजक वाक्य-रचना की दृष्टि से गलत है। यह CASE WHEN len(acc_id) > 8 then .. END होना चाहिए। यही कारण है कि आपको त्रुटि संदेश मिलता है।
 – 
Giorgos Betsos
6 जिंदा 2021, 14:56
क्या आप @acc_id के lebgtf के आधार पर, client_crm तालिका से भिन्न ID का उपयोग करना चाहते हैं। अगर ऐसा है, तो आपको एक अलग WHERE क्लॉज की जरूरत है। और, आप @acc_id का उपयोग कहां करते हैं?
 – 
Zhorov
6 जिंदा 2021, 15:00
क्षमा करें मैं एसक्यूएल के लिए नया हूं, इसलिए अगर मेरी समझ बंद है तो कृपया मुझे क्षमा करें। मूल रूप से @acc_id या तो client_id या client_acc हो सकता है। यदि acc_id की लंबाई 8 से अधिक है तो acc_id एक client_id है अन्यथा यह एक client_acc है। फिर मैं क्‍वेरी वापस करने के लिए खातों की सूची तैयार करने के लिए या तो क्‍लाइंट_आईडी या क्‍लाइंट_एसीसी का उपयोग कर रहा हूं
 – 
Nelboy13
6 जिंदा 2021, 15:12

1 उत्तर

सबसे बढ़िया उत्तर

आपको एक अलग WHERE क्लॉज की जरूरत है। शायद इस गलतफहमी का कारण यह तथ्य है कि टी-एसक्यूएल CASE में एक अभिव्यक्ति है, न कि "नियंत्रण-प्रवाह" भाषा तत्व।

WHERE 
   (
      (LEN(@acc_id) > 8) AND (crm.client_acc in (SELECT client_id FROM client_crm))
   ) OR
   (
      (LEN(@acc_id) <= 8) AND (crm.client_acc in (SELECT client_acc FROM client_crm))
   )
0
Zhorov 6 जिंदा 2021, 15:20