하루에 하나씩 올릴려고 했는데 오늘도 PASS~
음~ 오늘은 4시간동안 푸닥거리 했는데 건진게 없다. ...ㅠ.ㅠ 바보인가봥~
그래도 상현이가 쓸 챕터의 advanced 부분이 될만한 꺼리를 찾은거 같다.
치매방지 활동이지만 너무 재미있다.
얏호~ 자야지~
내일도 즐거운 DR Planning~ 큭~
아래와 같은 6번 쿼리를 던지면 컴파일이 일어나거나 리컴파일이 일어난 2번만 플랜이 찍히게 된다.
너무 많은 플랜이 찍혀 힘들다면 사용해 볼 수 있다. 그러나 실제 실행계획이 아니라 이 또한 예상 실행 계획 이다.
산술 오류의 변경 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
-- 정상수행