मेरे पास नीचे की तरह एक कर्मचारी ऑडिट तालिका है:

Id      EmployeeId      
1       100
2       101

मेरे पास चर के नीचे 2 है:

DECLARE @Version INT = 10;
DECLARE @isAuditDone BIT = 0;
//logic to populate Version and isAuditDone

उपरोक्त चर के आधार पर, मैं जांचना चाहता हूं कि क्या ऑडिट किया गया है तो मैं नीचे दिए गए कर्मचारी ऑडिट से आईडी वापस करना चाहता हूं:

if @isAuditDone
    return Id + '.' + Version = 1.10
else 
    return Id

जिज्ञासा:

select 
    (CASE
          WHEN @isAuditDone = 1
                THEN E.Id + '.' + @Version
          WHEN @isAuditDone = 0
                THEN E.Id
          ELSE 
                E.Id
          END) AS Id, 
          EmployeeId
    from 
    EmployeeAudit E

लेकिन मैं नीचे त्रुटि हो रही है:

वर्चर मान '.' को परिवर्तित करते समय रूपांतरण विफल रहा। डेटा प्रकार int के लिए।

क्या कोई कृपया मदद कर सकता है?

अद्यतन :

EXEC [dbo]। [GetEmployeeAuditJson] @employeeId = 101

select statement पर SP वापसी प्रकार:

FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES;
0
ILoveStackoverflow 26 जिंदा 2022, 21:20
2
क्या यह कोड संग्रहीत प्रक्रिया में है? आप एक संग्रहीत कार्यविधि से एक स्ट्रिंग को वापस नहीं कर सकते, वापसी का उपयोग स्थिति / त्रुटि कोड के लिए किया जाता है, और यह केवल int का समर्थन करता है। साथ ही return Id + '.' + Version = 1.10 प्रवाहित नहीं होता। कोशिश करें SELECT CONCAT(Id, '.', @Version);
 – 
Aaron Bertrand
26 जिंदा 2022, 21:22
सलाह के लिये धन्यवाद। मैंने आपके द्वारा सुझाए गए प्रयास किए लेकिन फिर भी त्रुटि प्राप्त हो रही है: वर्चर मान '1.10' को डेटा प्रकार int में परिवर्तित करते समय रूपांतरण विफल रहा। यह कोड एक संग्रहित प्रक्रिया में है
 – 
ILoveStackoverflow
26 जिंदा 2022, 21:25
1
क्या आप वह वास्तविक कोड दिखा सकते हैं जिसका आप उपयोग कर रहे हैं क्योंकि आपके प्रश्न का कोड मेरे लिए संकलित नहीं है। यदि आप अभी भी return का उपयोग करने का प्रयास कर रहे हैं तो आप कभी भी किसी संग्रहीत कार्यविधि से return स्ट्रिंग नहीं कर पाएंगे। CONCAT प्रकारों को अनदेखा करता है, इसलिए आपको रूपांतरण त्रुटियों से निपटने के बिना एक स्ट्रिंग बनाने देना चाहिए। उदाहरण। लेकिन आपको एक SELECT या एक OUTPUT पैरामीटर का उपयोग करना होगा, क्योंकि एक संग्रहीत कार्यविधि return जैसे मान 5.1.10 नहीं हो सकती।
 – 
Aaron Bertrand
26 जिंदा 2022, 21:25
वह वास्तविक कोड है जिसे मैंने प्रश्न में पोस्ट किया है। आपको क्या त्रुटि मिल रही है? आउटपुट को "1.10" के रूप में वापस करने का समाधान क्या है? इसका कोई समाधान नहीं है?
 – 
ILoveStackoverflow
26 जिंदा 2022, 21:33
आपके द्वारा उपयोग की जा रही संग्रहीत प्रक्रिया परिभाषा क्या है और आप संग्रहीत प्रो को कैसे निष्पादित कर रहे हैं, क्या आप इसका वर्णन कर सकते हैं?
 – 
magnus
26 जिंदा 2022, 21:34

2 जवाब

बस हारून की टिप्पणी पर विस्तार करने के लिए

आपको डेटा प्रकार को सुसंगत रखना होगा। इस मामले में तार।

select 
    (CASE
          WHEN @isAuditDone = 1
                THEN concat(E.Id,'.',@Version)
          WHEN @isAuditDone = 0
                THEN concat('',E.Id)  -- Notice INT to string 
          ELSE 
                concat('',E.Id)       -- Notice INT to string 
          END) AS Id, 
          EmployeeId
    from 
    EmployeeAudit E
2
John Cappelletti 26 जिंदा 2022, 21:31
मेरी मदद करने के लिए आपके तरह के प्रयासों के लिए उत्साहित। मुझे यह कोशिश करने दो। साथ ही, क्या इसे दशमलव के रूप में 1.10 के रूप में वापस करना संभव है या यदि isAuditDone = 1 और वापसी int है तो isAuditDone = 0 अगर हमें दूसरों द्वारा बताए गए स्ट्रिंग को वापस करने में कोई समस्या है?
 – 
ILoveStackoverflow
26 जिंदा 2022, 21:51
ज़रूर, आप CASE को एक कन्वर्ट (दशमलव (2), केस ...) में आईडी के रूप में लपेट सकते हैं
 – 
John Cappelletti
26 जिंदा 2022, 21:54
यहाँ मुख्य बात यह है कि CASE व्यंजक का डेटाटाइप सुसंगत होना चाहिए... int, string, दशमलव, आदि।
 – 
John Cappelletti
26 जिंदा 2022, 22:00

यदि आप संग्रहीत प्रक्रिया से पूर्णांक मान के अलावा कुछ और वापस करना चाहते हैं तो आपको आउटपुट कॉलम का उपयोग करने की आवश्यकता है। तो आपके मामले में आपको स्ट्रिंग वापस करनी होगी क्योंकि आपके पास संख्या के साथ जोड़ने के लिए एक डॉट है। यह एक डेमो संग्रहीत प्रक्रिया परिभाषा है जिसे आप अपनी इच्छा को पूरा करने के लिए उपयोग करने का प्रयास कर सकते हैं।

CREATE PROCEDURE  SProc
@Id varchar(500) OUTPUT
AS 
select 
    (CASE
          WHEN @isAuditDone = 1
                THEN concat(E.Id,'.',@Version)
          WHEN @isAuditDone = 0
                THEN concat('',E.Id)   
          ELSE 
                concat('',E.Id)       
          END) AS Id, 
          EmployeeId
    from 
    EmployeeAudit E

फिर आप अपनी संग्रहित प्रो को आउटपुट पैरामीटर के साथ इस तरह निष्पादित कर सकते हैं।

Declare @Id varchar(500)
EXEC SProc  @Id  OUTPUT
1
magnus 26 जिंदा 2022, 21:48
उत्तर के लिए बहुत बहुत धन्यवाद लेकिन मेरा अपडेट देखें। हालांकि मेरी मदद करने की दिशा में आपके प्रयासों के लिए वोट दिया गया
 – 
ILoveStackoverflow
26 जिंदा 2022, 21:50