산술 오류의 변경 sql 2000 Vs sql 2005
산술 오류의 변경 SQL SERVER 2000 VS. 2005
아래 쿼리는 SQL SERVER 2000 에서는 에러가 없다.
그런데 SQL SERVER 2005 이상에서는 에러가 난다.
이 얼마나 황당한가? 왜 그렇게 변경 되었을지 의견을 달아 봐라.
CREATE TABLE T1 (A INT, B CHAR(8))
INSERT T1 VALUES (0, '0')
INSERT T1 VALUES (1, '1')
INSERT T1 VALUES (99, 'ERROR')
CREATE TABLE T2 (X INT)
INSERT T2 VALUES (1)
INSERT T2 VALUES (2)
INSERT T2 VALUES (3)
INSERT T2 VALUES (4)
INSERT T2 VALUES (5)
set showplan_text on
SELECT T1.A, CONVERT(INT, T1.B) AS B_INT
FROM T2 JOIN T1 ON T1.A = T2.X
GO
StmtText
----------------------------------------------------------------------------
SELECT T1.A, CONVERT(INT, T1.B) AS B_INT
FROM T2 JOIN T1 ON T1.A = T2.X
(1개 행이 영향을 받음)
StmtText
--------------------------------------------------------------------------------------------------------------------------------------------------
|--Hash Match(Inner Join, HASH:([IOTest].[dbo].[T1].[A])=([IOTest].[dbo].[T2].[X]), RESIDUAL:([IOTest].[dbo].[T2].[X]=[IOTest].[dbo].[T1].[A]))
|--Compute Scalar(DEFINE:([Expr1008]=CONVERT(int,[IOTest].[dbo].[T1].[B],0)))
| |--Table Scan(OBJECT:([IOTest].[dbo].[T1]))
|--Table Scan(OBJECT:([IOTest].[dbo].[T2]))
(4개 행이 영향을 받음)
--메시지 245, 수준 16, 상태 1, 줄 1
--VARCHAR 값 'ERROR '을(를) 데이터 형식 INT(으)로 변환하지 못했습니다.
SELECT T1.A, CONVERT(INT, T1.B) AS B_INT
FROM T2
JOIN T1
ON T1.A = T2.X
OPTION (FORCE ORDER)
GO
-- 정상수행