У меня есть таблица с полем типа NTEXT, в котором хранятся значения многих типов, в том числе размер файла. Я пытаюсь выполнить запрос к списку записей и добавить размеры файлов, но столкнулся с этой запутанной проблемой.
Поскольку NTEXT нельзя прямо/неявно преобразовать в INT или BIGINT, я сначала преобразую его в VARCHAR, а затем Я пытаюсь преобразовать его в INT или BIGINT. Все идет нормально, пока я не попытаюсь преобразовать значение VARCHAR в INT или BIGINT.
Вот мои запросы и результаты:
Сначала я пробую следующее, что не вызывает проблем, и результат равен 61069 (значение по-прежнему имеет тип ntext).
SELECT FileSize
FROM dbo.myTable
WHERE ID = 111
Теперь я конвертирую/привожу его как varchar, и снова без проблем. Вывод 61069 (теперь тип varchar).
SELECT CONVERT(VARCHAR, FileSize)
FROM dbo.myTable
WHERE ID = 111
Наконец, я пытаюсь преобразовать значение VARCHAR в BIGINT, чтобы выполнить SUM() и другие вычисления, но на этот раз я получаю сообщение «Ошибка преобразования типа данных varchar в bigint.».
SELECT CONVERT(BIGINT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111
И если я попытаюсь вместо этого преобразовать его в INT, я получаю сообщение «Ошибка преобразования при преобразовании значения varchar '7/1/2008 3:39:30 AM' в тип данных int"
SELECT CONVERT(INT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111
Я абсолютно потерян, есть идеи, что может быть причиной этого?
ISNUMERIC
, которая потенциально будет соответствовать большему количеству строк, а также потенциально идентифицирует значения, которые проходят проверкуISNUMERIC
, но не могут быть преобразованы вINT
. ПопробуйтеSELECT ISNUMERIC('5e6');
— теперь попробуйте преобразовать эту строку вINT
. Другими словами, если этот пользователь использует тот ответ, он все равно может получить сообщение об ошибке. Это может хорошо работать дляFLOAT
, но могут быть и случаи, когда они не работают. Я бы поостерегся во многом полагаться наISNUMERIC
. - person Aaron Bertrand   schedule 11.02.2013