2010-07-01 37 views
8

200 sütun ile büyük bir INSERT -statement var ve ben çok korkuyorum Error converting data type varchar to numeric. "Varchar" değerini içeren gerçek sütunu görebileceğim bir yer var mı? Hataların ortadan kalkmasına kadar sütunlardan birini kaldırabildiğimi biliyorum, ama çok can sıkıcı."Veri türü varchar, sayısal olarak dönüştürülürken hata oluştu." - Hangi sütun?

+4

Her seferinde sütunların yarısını yorumlayabilirsiniz; Hala sıkıcı ama daha hızlı. –

cevap

5

SQL Server Sürümünü veya satır sayısını belirtmezsiniz. içinde haydut satır belirlenmesine yardımcı olabilecek INSERT için OUTPUT de ekleme SQL2005 + için

o çıktısı verecektir sonraki satır sorunla biridir yüzden bir hatayla karşılaşır kadar sokulan satırlar

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 

İade

 
    (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

Daha önce hiç bir zaman INSERT üzerinde OUTPUT denemeyin. Teşekkürler! – Espo

0

Eh, bu sadece bir önsezidir, ancak verileri geçici bir tabloya ekleme ve verileri diğer tabloya geçirmek için GUI'yi kullanma hakkında ne olur? Hala bir hata oluşturursa, en azından işe yaramazsa

, this.

Şerefe denemeyi düşünün ... Bu sayısal olmayan sütun üzerinde daha fazla geri bildirim almak gerekir!

6

Ne yazık ki, bu hata ciddi bir acıdır ve sorunu gidermek için kolay bir yol yoktur. Geçmişte karşılaştığımda, suçu bulana kadar her zaman sütun gruplarını yorumlamak zorunda kaldım.

Başka bir yaklaşım, suçluyu bulmak ve bulmak için T-SQL'de ISNUMERIC() işlevini kullanmak olabilir.

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

Bu sayısal olmayan değer içeren satırı maruz edecek ve hangi sütunun oldukça açık yapmalıdır: Hedef tablosundaki her sütun varsayarsak (eğer o değil buna göre ayarlayın) sayısalsa, bunu deneyebilirsiniz İçinde çok sıkıcı olduğunu biliyorum, ama en azından sorun yaratan sütuna ek olarak gerçek değeri yakalamanıza yardımcı olur.

İlgili konular