1

外側のクエリで数値を使用してもエラーが発生します。

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 条件を削除すると、数値のみが表示されます。エラーが発生し、他の行が読み取られた場合でも。

既にフィルター処理されているため、外部クエリで他の行を読み取るのはなぜですか?

4

1 に答える 1

0

Answer は Martin Smith に捧げられています。

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

ありがとうマーティン。

于 2013-09-18T13:01:23.817 に答える