- MsSQL Server_강제 매개변수화 테스트2015년 07월 01일 13시 45분 00초에 업로드 된 글입니다.작성자: DE 군고구마반응형
스터디에서 나온 질문 중에 다음과 같은 질문이 있어서 해당 포스트를 작성하였습니다.
질문 : Forced param할 때 캐릭터 타입 선언된 길이까지 같아야 재컴파일을 하는가?
또한 강제매개 변수화가 이해가 안가시는 분들은 아래의 링크를 참조하시기 바랍니다.
강제 매개변수화 : http://technet.microsoft.com/ko-kr/library/ms175037(v=sql.105).aspx
단순 매개변수화 : http://technet.microsoft.com/ko-kr/library/ms186219(v=sql.105).aspx
우선 현재 강제매개변수화를 선언해 줍니다.
ALTER DATABASE WorkDB SET PARAMETERIZATION FORCED
GO
선언이 잘 되었는지 확인 합니다.
SELECT name, is_parameterization_forced FROM sys.databases
0 = 강제매개변수화
1 = 단순매개변수화
테이블을 만듭니다.
CREATE TABLE Forced_test
(
ID int
,Name varchar(20)
)
단순한 값만 입력 받을 수 있도록 하는 테이블 입니다.
그 후에 정확하고 깔끔하게 저장된 실행계획을 보기 위해서 실행계획을 비워주도록 하겠습니다.
DBCC FREEPROCCACHE
그리고 다음 adhoc 쿼리를 순차적으로 실행했습니다.
insert into Forced_test values (1,'주형권')
insert into Forced_test values (1,'주형권주형권SQLTAG')
그 후에 실행계획은 어떻게 저장 하였을까요?
select cp.objtype,st.text,cp.usecounts
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle)st
order by text
확인 결과 다음과 같습니다.
같은 쿼리로 인식했습니다.
그렇다면 어떻게 하면 다른 쿼리로 인식할까요?
insert into Forced_test values (1,'주형권')
insert into Forced_test values (1,N' 주형권SQLTAG')
문자를 Nvarchar로 날렸더니 다르게 인식했습니다. (필자가 한번 더 해봐서 count가 3개가됨)
이로써 우리는 길이는 상관이 없고 형식은 상관이 있는것을 볼 수 있습니다.
근대 여기서 한가지 궁금한게 있습니다. varchar(8000)인데... 그럼 varchar(max)로 하고 8000자 이내와 8000자를 넘기면 어떻게 될까요?
아까 분명히 길이는 상관없는지 알았습니다. 하지만 다르게 인식합니다.
한개는 8000바이트를 넘고 한개는 넘지 않습니다. 8000바이트를 넘으니 max로 변환하더군요.
답변 : varchar8000 이내는 상관이 없었습니다. 하지만 비유니코드 nvarchar와 varchar는 다르게 인식하고 varchar(max)여도 8000자를 넘을때와 넘지
않을 경우 다르게 나타났습니다.
즉, 길이와 형식 모두 관련이 있다는 것을 알 수 있습니다
반응형'Database > MSSQL Server' 카테고리의 다른 글
MSSQL_AUTO_UPDATE_STATISTICS_ASYNC(비동기업데이트) (0) 2015.07.01 MsSQL Server_Shrink(쉬링크) / ①SHRINKDATABASE (0) 2015.07.01 MsSQL_리소스 매니져(Resoure Manager) 테스트 (0) 2015.07.01 MsSQL Replace (0) 2015.07.01 MsSQL_커서(Cusor) (0) 2015.07.01 다음글이 없습니다.이전글이 없습니다.댓글