본문 바로가기
[ DataBase ]/DB etc.

nvarchar(max)

by 관이119 2014. 2. 7.

 

 

 

 

 

출처 - http://blog.naver.com/gun0626?Redirect=Log&logNo=40026063891

출처 - http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=131142270&qb=bnZhcmNoYXIobWF4&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RYfb1spySEKssZ/zNQ0ssssssts-166879&sid=UvSG1ApyVmMAAE-zZXk

 

 

sql server 2000에서 sp_executesql 을 사용할 때 제약조건이 있었는데,

sql 문을 4000자 이상 처리할 수 없다는 것입니다.

sql 문은 유니코드 문자열(nvarchar 나 nchar)이어야 하기 때문에 최대 4000자까지 쓸 수 있습니다.
참고로 ntext 형은 변수 선언을 할 수 없습니다.

 

예를 들어 다음과 같은 쿼리가 있다고 해보죠.

declare @sql nvarchar(4000)
set @sql = 'select * from tableA .....' 
exec dbo.sp_executesql @sql

 

만약 @sql에 4000자가 넘어가는 문장을 넣게되면 @sql은 4000자에서 문장을 자를것이고, 따라서 sp_executesql은 실패하게 될 것입니다.

 

하지만 sql server 2005에서는 nvarchar(max)라를 데이터 타입이 추가되었고, 변수 선언이 가능해 졌습니다.

다음과 같이 위 쿼리를 수정하면 sql server 2005에서는 4000자 이상되는 동적 쿼리도 처리가 가능해 집니다.

declare @sql nvarchar(max)
set @sql = 'select * from tableA .....' 
exec dbo.sp_executesql @sql

 

------------------------------------------------------------

 

procedure를 작성하던 중 varchar(max)와 nvarchar(max) 차이를 알고 싶어서 질문 올립니다.

각각 몇 byte를 저장할 수 있나요?

 

 

동일하게 2 GB 까지 저장됩니다. 

대신 NVARCHAR(MAX)의 경우 모든 문자를 2 BYTE 유니코드로 인식하기 때문에 실제 글자수는 VARCHAR(MAX)보다 적게 저장될 수 있습니다.

 

 

댓글