Я создал представление с именем vReceivedEmail, которое включает столбец varchar с именем RowPrimaryKeyValue. В этом столбце обычно хранятся значения идентификатора первичного ключа, такие как 567781
, но время от времени появляется описательный текст «Специальное сообщение».
Я настроил представление так, чтобы оно отображало только записи, содержащие значения первичного ключа, а затем CAST
столбец как int
.
SELECT CAST(Email.RowPrimaryKeyValue as int) as DetailID
FROM MessageStore.dbo.Email Email
WHERE ISNUMERIC(Email.RowPrimaryKeyValue) = 1
Когда я тестирую представление, я получаю только записи с ожидаемыми значениями первичного ключа, и когда я смотрю на список столбцов для представления в проводнике объектов, столбец сохраняется с типом данных int
.
Затем я попытался применить следующее предложение WHERE
в отдельном запросе, ссылаясь на мое сохраненное представление:
SELECT PotAcc.DetailID
FROM PotentialAccounts PotAcc
WHERE PotAcc.DetailID NOT IN (
SELECT RecEmail.DetailID
FROM vReceivedEmail RecEmail
)
... но я возвращаю следующую ошибку:
Ошибка преобразования при преобразовании значения varchar "Ad hoc message" в тип данных int.
«Специальное сообщение» - это данные из столбца, который я отфильтровал и преобразовал в int, но я не знаю, как ему удается споткнуться об этом, поскольку представление явно отфильтровывает это и преобразует столбец в int.