Имам таблица с поле от тип 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