상세 컨텐츠

본문 제목

회원가입

청강컴정/09DataBase기말고사

by luckey 2009. 5. 8. 13:42

본문

1. 아이디는 중복가입될 수 없다.
2. 학번은 중복될 수 없다.(primary key 설정)
3. 같은 이름이라고 하더라도 학번이 다르면 가입될 수 있다.
4. 아이디는 최소 6자리 부터 12자리까지 입력이 가능하다.
5. 비밀번호는 최소 4자리 부터 12자리 까지 입력이 가능하다.
6. 아이디와 비밀번호는 같을 수 없다.
7. 아이디는 영문, 숫자, 언더바(_), 하이픈(-) 만 사용할 수 있다.
8. 아이디의 첫글자는 숫자가 될 수 없다.

--회원 테이블 생성
create table member
(
 mIdx  int not null,--회원고유번호
 mName  nvarchar(5) not null, --회원이름
 mHak  char(9) primary key not null, --학번
 mId   varchar(12) not null, -- 회원아이디
 mPwd  varchar(12) not null, -- 회원비밀번호
 mRegDate datetime default getdate(), -- 가입일
 mType  bit default 0 not null -- 회원분류(0 : 정상, 1 : 졸업)
)
go

--가입 트리거
create trigger TRG_MEM_INSERT on member
instead of insert
as
begin
set nocount on;
begin tran
 begin try

  declare @mId varchar(12)
  declare @mHak char(9)
  declare @mName nvarchar(5)
  select @mId=mId, @mHak=mHak, @mName=mName from inserted

  declare @errNum int
  set @errNum = 0

  declare @errText nvarchar(100)
  set @errText = 'nothing'
  
  --글번호 셋팅
  declare @idxNum int
  select @idxNum = MIN(mIdx) from member

  --번호설정
  if @idxNum is null
  begin
   set @idxNum = 1
  end
  else
  begin
   select top 1 @idxNum = rn
   from
   (
    select mIdx,(row_number() over (order by mIdx)) as rn
    from member
   ) TT
   where mIdx <> rn
  end

  if @idxNum is null
  begin
   set @idxNum = @idxNum + 1
  end

  if exists(select * from member where mId=@mId)
  begin
   set @errNum = 1
   set @errText = '중복된 아이디가 있습니다.'
  end
  else if exists(select * from member where mHak=@mHak and mName=@mName)
  begin
   set @errNum = 2
   set @errText = '이미 가입이 되어 있습니다.'
  end
  else
  begin
   insert into member (mIdx, mName, mHak, mId, mPwd)
   select @idxNum, mName, mHak, mId, mPwd from inserted
  end

 end try

 begin catch
  if (@@trancount > 0)
  rollback tran
   set @errNum = 2
   set @errText = '이미 가입이 되어 있습니다.'
 end catch

 if(@@trancount > 0)
  commit tran

 select @errNum as errNum, @errText as errText

end

errNum 과 errText 값을 반환한다.

--회원가입 프로시져
create proc MEM_INSERT
(
 @mName nvarchar(5),
 @mHak char(9),
 @mId varchar(12),
 @mPwd varchar(12)
)
as
begin
 insert into member (mName, mHak, mId, mPwd) values (@mName, @mHak, @mId, @mPwd)
end


--정상가입 (0, nothing)
MEM_INSERT '정우창', '200872032', 'memid','passwd'

--아이디가 같을경우 (1, 중복된 아이디가 있습니다.)
MEM_INSERT '정우창1', '200872033', 'memid','passwd1'

-- 학번이 이미 있을경우 (2, 이미 가입이 되어 있습니다.)
MEM_INSERT '정우창1', '200872032', 'memid1','passwd1'

--이름만 다른 경우 (1, 중복된 아이디가 있습니다.)
MEM_INSERT '정우창1', '200872032', 'memid','passwd'

관련글 더보기

댓글 영역