varchar(max) 주의사항
use t
go
if object_id ('tblx') is not null
drop table tblx
go
create table tblx
(idx int identity(1,1)
,a int
)
go
declare @a varchar(max)
set @a =''
-- 문제없음
set @a =
'--' + replicate ('a', 7000)
+ char(10) + char(13)
+ 'insert into tblx (a) select 1'
exec (@a)
-- 에러 222222 를 넣었는데 22 만 들어감
set @a =
'--' + replicate ('a', 7966)
+ char(10) + char(13)
+ 'insert into tblx (a) select 222222'
print @a
exec (@a)
-- 조용히 데이터 안들어감
set @a =
'--' + replicate ('a', 8000)
+ char(10) + char(13)
+ 'insert into tblx (a) select 3'
exec (@a)
go
-- 문제의 해결
set @a =
convert(varchar(max), '')
+ '--' + replicate ('a', 8000)
+ char(10) + char(13)
+ 'insert into tblx (a) select 3'
exec (@a)
go
select * from tblx
유사한 오류는 다음과 같은것이 있습니다.
실제 오류는 아니지만 다음과 같은 계산이 안된다.
select power(2,31)-1
메시지 232, 수준 16, 상태 3, 줄 1
int 유형에 산술 오버플로 오류가 발생했습니다. 값 = 2147483648.000000
declare @a int, @b int, @c bigint
select @a = 2147483647, @b = 2147483647
set @c = @a + @b
select @c
메시지 8115, 수준 16, 상태 2, 줄 4
expression을(를) 데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.
--------------------
NULL
(1개 행이 영향을 받음)