SQLServer의 VARCHAR 변수를 조건식으로 편입할 때 고려할 사항

10083 단어 C#SQLtech

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)
@idNULL인 경우 다 얻고 싶어요.
DB 설계 변경으로 인해 SQL만 수정 누락된 경우
거래에서 모두 취득id하려는데 다섯 자릿수 기록밖에 얻지 못했다.

참, C#의 SqlDbType입니다.VarChar 있지 않나요?


있죠.
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.sqldbtype?view=net-6.0
위의 공식 문서에 대한 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 설계 이후 변경은 지옥이니 잘 고려해 시행해야 한다.
그게 다야.

좋은 웹페이지 즐겨찾기