SQLServer의 VARCHAR 변수를 조건식으로 편입할 때 고려할 사항
VARCHAR형은 선언할 때 자릿수를 지정하거나 생략할 수 있다
MAX를 지정할 수도 있습니다.
declare @str_omt varchar
, @str_255 varchar(255)
, @str_max varchar(max)
변수의 초기 값은 NULL입니다.select @str_omt [@str_omt]
, @str_255 [@str_255]
, @str_max [@str_max]
@str_omt@str_255
@str_max
NULL
NULL
NULL
생략할 때 어떻게 될까요?
set @str_omt = 'string'
set @str_255 = 'string'
set @str_max = 'string'
@str_omt@str_255
@str_max
s
string
string
IsNull 함수로 대입할 때
다음은 본론으로 아이스널을 조금 갈라놓으려고 합니다.
넬 때'null string'을 보여주고 싶어서 이런 SQL?
set @str_omt = null
set @str_255 = null
set @str_max = null
select IsNull(@str_omt,'null string') [@str_omt]
, IsNull(@str_255,'null string') [@str_255]
, IsNull(@str_max,'null string') [@str_max]
결과@str_omt
@str_255
@str_max
n
null string
null string
varchar형 변수를 IsNull로 분기하면 항상 해당 변수의 자릿수만 설정된 것으로 표시됩니다.
WHRE 조건으로 COUNT를 해보면?
다만 SELECT 문구로 실행하면 기록 수는 바뀌지 않는다.
이를 WERE 요건 등에 편입하면 음반 수가 달라져 피해가 커진다.
select * from
(select count(*) count_omt where 'null string' = isnull(@str_omt, 'null string')) a
,(select count(*) count_255 where 'null string' = isnull(@str_255, 'null string')) b
,(select count(*) count_max where 'null string' = isnull(@str_max, 'null string')) c
결과count_omt
count_255
count_max
0
1
1
이유를 말씀드리자면.
'null string' = isnull(@str_omt, 'null string')
부분 채점 공식'null sgtring' = 'n'
이렇게 될 거니까.이런 SQL에 특히 주의하세요.
declare @id varchar(5)
select a.id ,b.name
from トランザクション a
inner join マスターテーブル b
on a.id = b.id
where a.id = IsNull(@id, a.id)
@id
네NULL
인 경우 다 얻고 싶어요.DB 설계 변경으로 인해 SQL만 수정 누락된 경우
거래에서 모두 취득
id
하려는데 다섯 자릿수 기록밖에 얻지 못했다.참, C#의 SqlDbType입니다.VarChar 있지 않나요?
있죠.
위의 공식 문서에 대한 VarChar 유형은 다음과 같습니다.
データベース列が varchar(max) の場合、VarChar を使用します。
C# 에서 인코딩할 때 매개 변수가 SqlDbType.VarChar
라면 문제없을 것입니다.SQL 문장
declare
에 직접 변수를 발표할 때 주의하는 것이 좋다글쎄, 나는 그래도 가능한 한 지령 파라미터를 사용하는 것이 좋겠다고 생각한다.
SqlCommand cmd = new SqlCommand();
string s = @"select @str_max [@str_max]"
cmd.CommandText = s;
cmd.Parameters.Add("@str_max", SqlDbType.VarChar).Value = "keyword";
총결산
SQLServer에서 varchar 유형을 선언할 때는 비트 수를 주의해야 합니다.
용량에 상관없이 MAX를 지정하고 업무상 충분히 확보할 수 있는 자릿수를 지정합니다.
자릿수를 쉽게 생략하지 않고 오히려 생략을 사용하지 않는다.
DB 설계 이후 변경은 지옥이니 잘 고려해 시행해야 한다.
그게 다야.
Reference
이 문제에 관하여(SQLServer의 VARCHAR 변수를 조건식으로 편입할 때 고려할 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/maysatuki/articles/b35db2c638d0f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)