2013-09-18 4 views
1

Я столкнулся с ошибкой, даже если я использую числовое значение в моем внешнем запросе.Ошибка в varchar для числового преобразования с дополнительным запросом

IF OBJECT_ID('tempdb..#TestNumeric') IS NOT NULL 
BEGIN 
    DROP TABLE #TestNumeric 
END 

CREATE TABLE #TestNumeric (ids INT, Valu NVARCHAR(50)) 
INSERT INTO #TestNumeric 
SELECT 1, '12345' UNION ALL 
SELECT 1, '234234 23423' UNION ALL 
SELECT 1, '234234' 

;WITH CTE 
AS 
(
    SELECT ids, Valu 
     , Convert(NUMERIC(18,0),Valu) as OriginalNumValue 
     , ISNUMERIC(Convert(NUMERIC(18,0), Valu)) IsNumericTrue 
    FROM #TestNumeric 
    WHERE ISNUMERIC(Valu) = 1 
     AND Valu not like '%[^0-9]%' 
) 
SELECT * 
FROM CTE 
WHERE Valu = 100 

DROP TABLE #TestNumeric 

Если я просто удалю условие WHERE, тогда он отображает только числовые значения. Даже если он дает ошибку и показывает другие строки при чтении.

Почему он читает другие строки во внешнем запросе, поскольку я уже фильтровал?

+0

Возможный дубликат [Разделение TSQL на ноль, несмотря на отсутствие столбцов, содержащих 0] (http://stackoverflow.com/questions/5191701/tsql-divide-by-zero-encountered-despite-no-columns-containing-0) –

+1

Некоторые дополнительные ссылки в [мой ответ здесь] (http://stackoverflow.com/a/7192951/73226) –

+0

Но я физически загружаю строки в внешний псевдоним таблицы. не в том же объеме. Здесь немного путают. –

ответ

0

Ответ посвящен Мартину Смиту.

http://connect.microsoft.com/SQLServer/feedback/details/537419/sql-server-should-not-raise-illogical-errors 

Thanks Martin.

Смежные вопросы