2015-02-23 2 views
0

У меня есть поиск здесь, и я все еще не уверен, где я ошибаюсь.Преобразование Sql не удалось при преобразовании значения varchar

Я пытаюсь выяснить, какие письма не обманывают в таблице a_customer , где электронная почта находится в dbo.Remail запрос будет работать около 20 минут, после чего появится это сообщение об ошибке.

Ошибка преобразования при преобразовании значения varchar в тип данных int.

SET ANSI_WARNINGS OFF 
    select email from dbo.Remail with (nolock) 
    where email in (select cast(count(email) as int) from a_customer 
    group by email 
    having count(email) < 1 
) 
+2

Этот запрос не имеет никакого смысла. Вы выбираете количество сообщений электронной почты, где нет сообщений электронной почты и поиск по таблице «Remail» по этому счету? – Luaan

+1

'WHERE email IN (SELECT COUNT() ....)' ?, что не имеет никакого смысла – Lamak

+1

Я предполагаю, что ваш столбец электронной почты не является целым числом? Ваш предикат ищет строки, где значение email = количество строк из a_customer. Я подозреваю, что вы не хотите рассчитывать, а вместо этого должны использовать электронную почту. fwiw, знаете ли вы все, что намекает подсказка NOLOCK? Из взглядов вашего запроса это может быть хорошо, но слишком много людей не понимают всех последствий этого намека. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

ответ

0

Это звучит как email является varchar, в то время как тип возврата вашего подзапроса является int. Сервер пытается преобразовать внешний email в int и терпит неудачу.

Похоже, вы хотите выбрать все электронные письма, у которых еще нет «пересылки», но это не то, что делает ваш запрос. Вообще.