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개 행이 영향을 받음)
'밥벌이' 카테고리의 다른 글
OPTIMIZE FOR ( @variable_name { UNKNOWN | = literal_constant } [ , ...n ] ) (0) | 2010.11.19 |
---|---|
민석이의 waitstat 모니터링 (0) | 2010.11.18 |
부하 데이터생성 (0) | 2010.11.18 |
Array Insert (1) | 2010.11.17 |
이 쿼리의 결과는 뭘까요? (6) | 2010.11.04 |