2011-04-29 9 views
12

chcę wstawić wszystkie wiersze z tabeli do innej tabeli, a ja też chcę konwertować pole nvarchar do bigint, ale kiedy używam convert(bigint, col1) SQL Server pokazuje błąd:Konwersja nvarchar do bigint w serwerze SQL 2008

Error converting data type nvarchar to bigint

Jak mogę rozwiązać ten problem?

+4

"Jak mogę rozwiązać ten problem? " - proste. usunąć dane, których nie można przekonwertować na biginteger –

+0

Jak usunąć automatycznie dane inne niż liczbowe ...? –

+2

nie ma magicznej różdżki, pisząc TSQL, aby ją usunąć! –

Odpowiedz

20

Można spróbować użyć ISNUMERIC do określenia tych wierszy, które są rzeczywiście numeryczna:

UPDATE dbo.YourTable 
SET BigIntColumn = CAST(NVarcharColumn AS BIGINT) 
WHERE ISNUMERIC(NVarcharColumn) = 1 

To by przekształcić te wiersze, które mogą być zamienione - pozostali muszą być rozpatrywane ręcznie.

+0

tnx ... to jest moja odpowiedź ... tak tnx –

+0

To nie powiedzie się dla dziesiętnych zapisanych jako ciągi : SELECT CAST ('. 1' AS BIGINT) GDZIE ISNUMERIC (". 1 ') = 1 –

+0

tylko, aby dodać do komentarza BD, char (36) i znaków 43-46, 48-57, 92, 128, 160, 162-165 wszyscy oceniają 1 jako numeryczne. Prawdziwy kicker znajduje się w instrukcji where lub join, w której najpierw odfiltrowujesz logicznie wszystkie wartości nieliczbowe, na końcu wykonasz instrukcję convert, a ten błąd nadal występuje (ignoruje zwarcie i ocenia całą linię). –

Powiązane problemy