출처 - 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§ion=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)보다 적게 저장될 수 있습니다.
'[ DataBase ] > DB etc.' 카테고리의 다른 글
[MSSQL] WITH (NOLOCK) (0) | 2014.08.06 |
---|---|
mssql 에서 char (0) | 2014.05.26 |
[MSSQL]OBJECT_ID 함수를 이용한 개체 존재 여부 확인 (0) | 2014.01.22 |
RAISERROR 예제 및 .NET에서 사용하기 (0) | 2014.01.21 |
ERWin을 이용해서 mysql 데이터베이스의 ERD 뽑기 (0) | 2012.09.12 |
댓글