मेरे पास नीचे की तरह एक कर्मचारी ऑडिट तालिका है:
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;
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
यदि आप संग्रहीत प्रक्रिया से पूर्णांक मान के अलावा कुछ और वापस करना चाहते हैं तो आपको आउटपुट कॉलम का उपयोग करने की आवश्यकता है। तो आपके मामले में आपको स्ट्रिंग वापस करनी होगी क्योंकि आपके पास संख्या के साथ जोड़ने के लिए एक डॉट है। यह एक डेमो संग्रहीत प्रक्रिया परिभाषा है जिसे आप अपनी इच्छा को पूरा करने के लिए उपयोग करने का प्रयास कर सकते हैं।
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
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।
int
का समर्थन करता है। साथ हीreturn Id + '.' + Version = 1.10
प्रवाहित नहीं होता। कोशिश करेंSELECT CONCAT(Id, '.', @Version);
return
का उपयोग करने का प्रयास कर रहे हैं तो आप कभी भी किसी संग्रहीत कार्यविधि सेreturn
स्ट्रिंग नहीं कर पाएंगे।CONCAT
प्रकारों को अनदेखा करता है, इसलिए आपको रूपांतरण त्रुटियों से निपटने के बिना एक स्ट्रिंग बनाने देना चाहिए। उदाहरण। लेकिन आपको एकSELECT
या एकOUTPUT
पैरामीटर का उपयोग करना होगा, क्योंकि एक संग्रहीत कार्यविधिreturn
जैसे मान5.1.10
नहीं हो सकती।