2010-05-20 1 views
2

У меня есть следующая таблица:Не удается найти какую строку вызывает погрешность преобразования

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

Я пытаюсь преобразовать NVARCHAR в дату, используя этот запрос:

select convert(datetime, expirydate) from accounts 

Я получаю эту ошибку:

Conversion failed when converting datetime from character string. 

В строке состояния указано «2390 строк». Я перехожу к строкам 2390, 2391 и 2392. В данных нет ничего плохого. Я даже пытаюсь преобразовать эти конкретные строки, и он работает. Как узнать, какая строка (-ы) вызывает ошибку преобразования?

+0

Вы проверили строки непосредственно над этим? Вы также можете попробовать скопировать половину строк в новую таблицу, соответствующим образом изменив ваш запрос, и если вы не получите ошибку, разделите оставшиеся строки еще раз, пока не сможете найти точную запись. Вы также можете попробовать отсортировать db в этом столбце, какие странные значения могут выскочить на вас. –

+0

Это также поможет узнать, сколько записей в этой таблице. –

ответ

6

Try:

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

Вот мой тестовый код:

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

В этой таблице нет первичного ключа. В его отсутствие просмотрщик таблиц и запрос не могут быть гарантированно работать в одном порядке, таким образом, 2390 означает разные строки. Как только будет создан первичный ключ, номер строки, показанный при запуске запроса, будет соответствовать номеру строки в представлении таблицы.