2010-07-01 15 views
8

मेरे पास 200 कॉलम के साथ एक विशाल INSERT -स्टेटमेंट है और मुझे डरावना Error converting data type varchar to numeric मिल गया है। क्या वहां कहीं भी मैं वास्तविक स्तंभ देख सकता हूं जिसमें "वर्कर" मान है? मुझे पता है कि जब तक त्रुटि गायब हो जाती है, तब तक मैं एक कॉलम को हटा सकता हूं, लेकिन यह बहुत कठिन है।"डेटा प्रकार वर्चर को न्यूमेरिक में कनवर्ट करने में त्रुटि।" - क्या कॉलम?

+4

आप एक समय में आधा कॉलम टिप्पणी कर सकते हैं; अभी भी थकाऊ, लेकिन जल्दी। –

उत्तर

5

आप SQL सर्वर संस्करण या पंक्तियों की संख्या निर्दिष्ट नहीं करते हैं।

SQL2005 + सम्मिलित करने के लिए OUTPUT खंड जोड़ने में दुष्ट पंक्ति की पहचान में मदद कर सकते हैं के लिए है कि यह होगा उत्पादन डाला पंक्तियों जब तक यह एक त्रुटि का सामना करना पड़ता है ताकि अगली पंक्ति समस्या के साथ एक है

DECLARE @Source TABLE 
(
Col1 VARCHAR(10), 
Col2 VARCHAR(10) 
) 

INSERT INTO @Source 
SELECT '1','1' UNION ALL 
SELECT '2','2' UNION ALL 
SELECT '3','3' UNION ALL 
SELECT '4A','4' UNION ALL 
SELECT '5','5' 


DECLARE @Destination TABLE 
(
Col1 INT, 
Col2 VARCHAR(10) 
) 

INSERT INTO @Destination 
OUTPUT inserted.* 
SELECT * 
FROM @Source 

रिटर्न

 
    (5 row(s) affected) 
    Col1  Col2 
    ----------- ---------- 
    1   1 
    2   2 
    3   3 
    Msg 245, Level 16, State 1, Line 23 
    Conversion failed when converting the varchar value '4A' to data type int. 
+0

पहले कभी INSERT पर आउटपुट की कोशिश नहीं की। धन्यवाद! – Espo

0

अच्छा, यह सिर्फ एक झटका है, लेकिन डेटा को अस्थायी तालिका में डालने और डेटा को अन्य तालिका में माइग्रेट करने के लिए जीयूआई का उपयोग करने के बारे में क्या है? यह अभी भी एक त्रुटि उत्पन्न करता है, तो आप कम से कम है कि गैर संख्यात्मक स्तंभ के बारे में अधिक प्रतिक्रिया प्राप्त करने में सक्षम होना चाहिए ...

यह काम नहीं करता है, तो this.

चीयर्स की कोशिश कर रहा पर विचार!

6

दुर्भाग्य से, यह त्रुटि एक गंभीर दर्द है और इसका निवारण करने का कोई आसान तरीका नहीं है। जब मैंने इसे अतीत में सामना किया है, तब तक मुझे हमेशा कॉलम के समूह को तब तक टिप्पणी करना पड़ता है जब तक मुझे अपराधी नहीं मिल जाता।

अपराधी को खोजने और खोजने के लिए टी-एसक्यूएल में ISNUMERIC() फ़ंक्शन का उपयोग करने का एक और तरीका हो सकता है। अपने गंतव्य तालिका में प्रत्येक स्तंभ मान लिया जाये कि सांख्यिक (तदनुसार समायोजित करता है, तो यह नहीं है) है, तो आप इस कोशिश कर सकते:

SELECT * 
    FROM SourceTable 
WHERE ISNUMERIC(Column1) = 0 
    OR ISNUMERIC(Column2) = 0 
    OR ISNUMERIC(Column3) = 0 
    OR ISNUMERIC(Column4) = 0 
    ... 

यह पंक्ति है कि अपने गैर-अंकीय मान होता है बेनकाब जाएगा, और यह बहुत स्पष्ट करना चाहिए जो स्तंभ यह अंदर है। मुझे पता है कि यह कठिन है, लेकिन कम से कम यह आपको वास्तविक मूल्य का शिकार करने में मदद करता है, जो कॉलम के अलावा परेशानी पैदा कर रहा है।

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