Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

वर्कर को फ्लोट में बदलने में त्रुटि

इसका मतलब है कि आपके पास तालिका में कम से कम एक पंक्ति है जिसे float . पर नहीं डाला जा सकता है . CASE कर रहे हैं सुरक्षित है, लेकिन सीटीई का संयोजन और WHERE क्लॉज जोड़ना प्रोग्रामर की एक सामान्य भ्रम में पड़ता है जब टी-एसक्यूएल लिखते हैं:कि घोषणा का क्रम निष्पादन का एक आदेश दर्शाता है . प्रोग्रामर को C जैसी भाषाओं की अनिवार्य प्रक्रियात्मक शैली के लिए उपयोग किया जाता है और SQL की घोषणात्मक सेट आधारित प्रकृति को समझने में विफल होते हैं। मैंने इस मुद्दे के बारे में पहले भी लिखा है और उदाहरण दिया है जब भ्रम त्रुटियों का कारण बनता है:

एक बार जब आप अपना पूरा कोड पोस्ट कर देते हैं तो हम देख सकते हैं कि आपने अपने मामले में वास्तव में कहां गलत किया और निष्पादन का एक निश्चित क्रम मान लिया।

अपडेट के बाद

ठीक है, इसलिए मुझे यह व्यवस्था करनी होगी कि आपके मामले में कोड निष्पादन के क्रम में सही है, result पहले CASE . का मूल्यांकन करने वाले कॉलम को अनुमानित नहीं किया जा सकता है . अगर केस WHERE क्लॉज में होता तो चीजें अलग होतीं।

आपकी समस्या अलग है:ISNUMERIC . इस फ़ंक्शन को NUMERIC . की बहुत उदार समझ है मतलब है और पहले कई डेवलपर्स को काट चुका है। अर्थात्, यह उन मानों को स्वीकार करता है जिन्हें CAST और CONVERT अस्वीकार कर देंगे। जैसे अल्पविराम वाले:

declare @n varchar(8000) = '1,000';
select isnumeric(@n);
select cast(@n as float);
select case when isnumeric(@n)=1 then cast(@n as float) else null end;

तो आपके पास वे मान हैं जो ISNUMERIC . पास करते हैं परीक्षण लेकिन कनवर्ट करने में विफल। बस एक सिर ऊपर, जितना अधिक आप इस दृष्टिकोण में खोदेंगे, उतने अधिक बंद दरवाजे आपको मिलेंगे। सर्वर की तरफ आपको आवश्यक कास्ट करने का कोई सुरक्षित तरीका नहीं है। आदर्श रूप से, डेटा मॉडल को ठीक करें (यदि यह फ़्लोट संग्रहीत करता है तो फ़ील्ड को एक फ़्लोट बनाएं)। उसमें से कम, डेटा को ट्राइएज करें और उन सभी मानों को हटा दें जो उचित फ्लोट नहीं हैं, और फ्रंट-एंड/एप्लिकेशन को अब नए पेश नहीं करने के लिए ठीक करें, फिर एक बाधा जोड़ें जो नए खराब मान दिखाई देने पर त्रुटि को ट्रिगर करेगा। आप इसे एक प्रश्न में हल नहीं कर पाएंगे, कि सड़क शवों से अटी पड़ी है।

SQL सर्वर के अगले संस्करण के साथ आपके पास एक नया कार्य होगा, TRY_CONVERT , जो आपकी समस्या का समाधान करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस पेशेवरों के लिए मशीन लर्निंग का क्या अर्थ है?

  2. SQL सर्वर 2012:रेगेक्स समूह निकालें

  3. SQL सर्वर में ऑडिट टेबल लागू करने के लिए सुझाव?

  4. SQL सर्वर में सांख्यिकी प्रोफ़ाइल क्या है?

  5. SQL सर्वर (T-SQL) में REPLICATE () फ़ंक्शन कैसे काम करता है