SQL Server에서 주소록 애플리케이션 DB 구축 및 CRUD 연습
이 문서는 SQL Server에서 주소록 애플리케이션 데이터베이스를 구축하고, 해당 데이터베이스에서 CRUD(Create, Read, Update, Delete) 작업을 연습하는 방법을 단계별로 설명합니다. 또한, CRUD 작업을 저장 프로시저로 구현하는 방법도 다룹니다. 이 과정을 통해 SQL 기본기를 향상시킬 수 있습니다.
1. 주소록(Address) 테이블 생성
먼저, 주소록 정보를 저장할 테이블을 생성합니다. 다음 SQL 스크립트를 사용하여 Address
테이블을 생성합니다.
Create Table dbo.Address
(
Num Int Identity(1, 1) Primary Key Not Null, -- 번호
[Name] NVarChar(25) Not Null, -- 이름
Email NVarChar(100) Null, -- 이메일
Phone NVarChar(15) Null, -- 전화
Mobile NVarChar(15) Null, -- 휴대폰
ZipCode NVarChar(7) Not Null, -- 우편번호
Address NVarChar(150) Null, -- 주소
PostDate SmallDateTime Default(GetDate()) -- 등록일
)
Go
2. CRUD 연습
CRUD 작업은 데이터를 생성(Create), 조회(Read), 수정(Update), 삭제(Delete)하는 기본적인 데이터베이스 작업입니다. 다음 스크립트를 사용하여 이러한 작업을 연습해보겠습니다.
2.1. 생성 (Create)
주소록에 새로운 주소 정보를 입력합니다.
Insert Address
(
Name,
Email,
Phone,
Mobile,
ZipCode,
Address,
PostDate
)
Values
(
'홍길동',
'h@h.com',
'114',
'119',
'123-445',
'서울',
GetDate()
)
Go
2.2. 조회 (Read)
주소록 테이블의 모든 주소 정보를 조회합니다.
Select *
From Address
Order By Num Desc
Go
특정 주소 정보를 조회합니다.
Select *
From Address
Where Num = 5
Go
2.3. 수정 (Update)
주소록의 특정 주소 정보를 수정합니다.
Begin Transaction
Update Address
Set
Name = '백두산',
Email = 'b@b.com',
Phone = '116',
Mobile = '110',
ZipCode = '456-123',
Address = '부산',
PostDate = GetDate()
Where
Num = 5
Commit Tran
Go
2.4. 삭제 (Delete)
주소록의 특정 주소 정보를 삭제합니다.
Begin Tran
Delete Address Where Num = 1
--RollBack Tran
Commit Tran
Go
2.5. 검색 (Search)
주소록에서 이름 또는 주소를 기준으로 정보를 검색합니다.
Select *
From Address
Where
Name Like '%홍%'
Or
Address Like '%서%'
Go
3. 저장 프로시저를 통한 CRUD 구현
CRUD 작업을 저장 프로시저를 사용하여 구현하는 방법입니다. 저장 프로시저를 사용하면 코드 재사용성을 높이고, 유지보수를 용이하게 할 수 있습니다.
3.1. 생성 (Create)
Create Procedure dbo.WriteAddress
(
@Name NVarChar(25),
@Email NVarChar(100),
@Phone NVarChar(15),
@Mobile NVarChar(15),
@ZipCode NVarChar(7),
@Address NVarChar(150)
)
As
Insert Address
(
Name,
Email,
Phone,
Mobile,
ZipCode,
Address,
PostDate
)
Values
(
@Name,
@Email,
@Phone,
@Mobile,
@ZipCode,
@Address,
GetDate()
)
Go
3.2. 조회 (Read)
모든 주소 정보 조회:
Create Proc dbo.ListAddress
As
Select *
From Address
Order By Num Desc
Go
특정 주소 정보 조회:
Create Proc dbo.ViewAddress
@Num Int
As
Select *
From Address
Where Num = @Num
Go
3.3. 수정 (Update)
Create Proc dbo.ModifyAddress
@Name NVarChar(25),
@Email NVarChar(100),
@Phone NVarChar(15),
@Mobile NVarChar(15),
@ZipCode NVarChar(7),
@Address NVarChar(150),
@Num Int
As
Begin Transaction
Update Address
Set
Name = @Name,
Email = @Email,
Phone = @Phone,
Mobile = @Mobile,
ZipCode = @ZipCode,
Address = @Address,
PostDate = GetDate()
Where
Num = @Num
Commit Tran
Go
3.4. 삭제 (Delete)
Create Procedure dbo.DeleteAddress
@Num Int
As
Begin Tran
Delete Address
Where Num = @Num
Commit Tran
Go
3.5. 검색 (Search)
Create Proc dbo.SearchAddress
@SearchField NVarChar(25),
@SearchQuery NVarChar(25)
As
Declare @strSql NVarChar(150)
Set @strSql = 'Select * From Address Where ' + @SearchField + ' Like ''%' + @SearchQuery + '%'''
Exec (@strSql)
Go
이 문서를 통해 SQL Server에서 주소록 애플리케이션 데이터베이스를 구축하고, CRUD 작업을 수행하는 방법을 배웠습니다. 저장 프로시저를 사용하여 CRUD 작업을 구현하는 방법도 함께 살펴보았습니다.
전체 소스 코드는 다음과 같습니다.
DotNetMemoCore\DotNetMemo.Database\dbo\Scripts\Address\AddressDB.sql
--* 주소록 애플리케이션 DB
--[0] 주소록(Address) 테이블 생성
Create Table dbo.Address
(
Num Int Identity(1, 1)
Primary Key Not Null,--번호
[Name] NVarChar(25) Not Null, --이름
Email NVarChar(100) Null, --이메일
Phone NVarChar(15) Null, --전화
Mobile NVarChar(15) Null, --휴대폰
ZipCode NVarChar(7) Not Null, --우편번호
Address NVarChar(150) Null, --주소
PostDate SmallDateTime
Default(GetDate()) --등록일
)
Go
--[1] 입력
Insert Address
(
Name,
Email,
Phone,
Mobile,
ZipCode,
Address,
PostDate
)
Values
(
'홍길동',
'h@h.com',
'114',
'119',
'123-445',
'서울',
GetDate()
)
Go
--[2] 출력
Select *
From Address
Order By Num Desc
Go
--[3] 상세
Select *
From Address
Where Num = 5
Go
--[4] 수정
Begin Transaction
Update Address
Set
Name = '백두산',
Email = 'b@b.com',
Phone = '116',
Mobile = '110',
ZipCode = '456-123',
Address = '부산',
PostDate = GetDate()
Where
Num = 5
--RollBack Tran
Commit Tran
Go
--[5] 삭제
Begin Tran
Delete Address Where Num = 1
Go
--에러 : X
Delete Address Where Num = 3
Go
--에러 : X
Delete Address Where Num = 5
Go
--에러 : X
--RollBack Tran
Commit Tran
--에러 : O
Go
--[6] 검색
Select *
From Address
Where
Name Like '%홍%'
Or
Address Like '%서%'
Go
--Stored Procedure
--[1] 입력 : WriteAddress, FrmWrite.cs, Write.aspx
Create Procedure dbo.WriteAddress
(
@Name NVarChar(25),
@Email NVarChar(100),
@Phone NVarChar(15),
@Mobile NVarChar(15),
@ZipCode NVarChar(7),
@Address NVarChar(150)
)
As
Insert Address
(
Name,
Email,
Phone,
Mobile,
ZipCode,
Address,
PostDate
)
Values
(
@Name,
@Email,
@Phone,
@Mobile,
@ZipCode,
@Address,
GetDate()
)
Go
Execute WriteAddress
'한라산', 'h@h.com',
'114', '115', '123-456', '대전'
Go
--[2] 출력 : ListAddress, FrmList.cs, List.aspx
Create Proc dbo.ListAddress
As
Select *
From Address
Order By Num Desc
Go
Exec ListAddress
Go
--[3] 상세 : ViewAddress, FrmView.cs, View.aspx
Create Proc dbo.ViewAddress
@Num Int
As
Select *
From Address
Where Num = @Num
Go
ViewAddress 10
Go
--[4] 수정 : ModifyAddress, FrmModify,cs, Modify.aspx
Create Proc dbo.ModifyAddress
@Name NVarChar(25),
@Email NVarChar(100),
@Phone NVarChar(15),
@Mobile NVarChar(15),
@ZipCode NVarChar(7),
@Address NVarChar(150),
@Num Int
As
Begin Transaction
Update Address
Set
Name = @Name,
Email = @Email,
Phone = @Phone,
Mobile = @Mobile,
ZipCode = @ZipCode,
Address = @Address,
PostDate = GetDate()
Where
Num = @Num
--RollBack Tran
Commit Tran
Go
Execute ModifyAddress '지리산', 'j@j.com', '114', '119', '123-123', '전북', 10
Go
--[5] 삭제 : DeleteAddress, FrmDelete.cs, Delete.aspx
Create Procedure dbo.DeleteAddress
@Num Int
As
Begin Tran
Delete Address
Where Num = @Num
--RollBack Tran
Commit Tran
Go
Execute DeleteAddress 10
Go
--[6] 검색 : SearchAddress, FrmSearch.cs, Search.aspx
Create Proc dbo.SearchAddress
@SearchField NVarChar(25),
@SearchQuery NVarChar(25)
As
Declare @strSql NVarChar(150)
Set @strSql = '
Select *
From Address
Where
' + @SearchField
+ ' Like ''%'
+ @SearchQuery + '%'''
--Print @strSql
Exec (@strSql)
Go
Exec SearchAddress 'Address', '서울'
Go
--배포 URL : http://www.dotnetkorea.com/
--테스트 URL : http://sample.redplus.net/Web/Address/List.aspx