2010-05-20 19 views
2

Je le tableau suivant:Vous ne trouvez pas quelle ligne est à l'origine une erreur de conversion

CREATE TABLE [dbo].[Accounts1](
    [AccountId] [nvarchar](50) NULL, 
    [ExpiryDate] [nvarchar](50) NULL 
) 

Je suis en train de convertir nvarchar datetime en utilisant cette requête:

select convert(datetime, expirydate) from accounts 

Je reçois cette erreur:

Conversion failed when converting datetime from character string. 

La barre d'état indique "2390 lignes". Je vais aux lignes 2390, 2391 et 2392. Il n'y a rien de mal avec les données là-bas. J'essaie même de convertir ces lignes particulières et cela fonctionne. Comment puis-je savoir quelle (s) ligne (s) est à l'origine de l'erreur de conversion?

+0

Avez-vous vérifié les lignes immédiatement au-dessus cela? Vous pouvez également essayer de copier la moitié des lignes dans une nouvelle table en modifiant votre requête de manière appropriée et si vous n'obtenez pas d'erreur, divisez les lignes restantes jusqu'à ce que vous puissiez localiser l'enregistrement exact. Vous pouvez également essayer de trier le db par cette colonne que des valeurs étranges peuvent sauter sur vous. –

+0

Il serait également utile de savoir combien d'enregistrements sont dans cette table. –

Répondre

6

Essayez:

SELECT * FROM [dbo].[Accounts1] WHERE ISDATE(ExpiryDate) = 0 

Voici mon code de test:

CREATE TABLE #t( 
    [ExpiryDate] [nvarchar](50) NULL 
) 

insert into #t (ExpiryDate) 
select '1/1/2010' 

insert into #t (ExpiryDate) 
select 'foo' 

insert into #t (ExpiryDate) 
select '2/1/2010' 

select * from #t where ISDATE(ExpiryDate) = 0 
-- returns 1 row 

drop table #t 
1

Cette table ne possède pas de clé primaire. En son absence, le visualiseur de table et la requête ne peuvent pas être garantis fonctionner dans le même ordre, 2390 signifie donc des lignes différentes. Dès qu'une clé primaire est créée, le numéro de ligne affiché lors de l'exécution de la requête correspond au numéro de la ligne dans la vue de la table.