SQL Server 강의실

시삽: 레드플러스 님 
게시판 이동:
 제목 : SQL Server 2005에서 반드시 알아야 할 사항(개발자) 총정리 쿼리문
글번호: 55
작성자: 레드플러스
작성일: 2007/04/19 오후 6:31:00
조회수: 9153
--[1] Create문
Create Table dbo.Memos
(
    Num Int Identity(1, 1) Not Null Primary Key, -- 번호
    Name VarChar(25) Not Null, -- 이름
    Email VarChar(50) Null, -- 이메일
    Title VarChar(150) Not Null, -- 제목(간단메모)
    PostDate DateTime Default(GetDate()), -- 작성일
    PostIP VarChar(15) Null -- IP주소
)
Go
--[2] Drop문
Drop Table dbo.Memos
Go
--[3] 입력
Insert Memos(Name, Email, Title, PostDate, PostIP)
Values('홍길동', 'h@h.com', '안녕하세요.', GetDate(), '127.0.0.1')
Go
--[4] 출력
Select *
From Memos
Order By Num Desc
Go
--[5] 상세
Select Num, Name, Title, PostDate
From Memos
Where Num = 1
Go
--[6] 수정
Begin Tran
    Update Memos
    Set Name = '백두산', Email = 'b@b.com'
    Where Num = 1
Commit Tran
Go
--[7] 삭제
Delete Memos
Where Num = 1
Go
--[8] 검색
Select *
From Memos
Where Name Like '%길%'
Go

--[!] 1부터 100까지 3의 배수 또는 4의 배수의 합을 구하는 프로그램을
--    T-SQL로 구현하시오.
--[1] 변수 선언
Declare @sum Int
Declare @i Int
--[2] 변수 초기화
Set @sum = 0
--[3] 반복문
Set @i = 1                    --[a] 초기식
While @i <= 100                --[b] 조건식
Begin
    If (@i % 3 = 0) Or (@i % 4 = 0)    --[!] 조건식
    Begin
        Set @sum = @sum + @i    --[!] 실행문
    End
    Set @i = @i + 1            --[c] 증감식
End
Select
    '1부터 100까지 3의 배수 또는 4의 배수의 합 : '
    + Cast(@sum As VarChar)
Go

--[*] 저장 프로시저 만들기
--[1] 입력
Create Proc dbo.AddMemo
(
    @Name VarChar(25),
    @Email VarChar(50),
    @Title VarChar(150),
    @PostIP VarChar(15)
)
As
    Insert Memos(Name, Email, Title, PostDate, PostIP)
    Values(@Name, @Email, @Title, GetDate(), @PostIP)
Go
AddMemo '한라산', 'h@h.net', '한라산입니다.', '127.0.0.1'
Go
--[2] 출력
Create Proc dbo.GetMemos
As
    Select *
    From Memos
    Order By Num Desc
Go
Exec GetMemos
Go
--[3] 상세
Create Proc dbo.GetMemo
    @Num Int
As
    Select Num, Name, Title, PostDate
    From Memos
    Where Num = @Num
Go
Execute GetMemo 6
Go
--[4] 수정
Create Proc dbo.EditMemo
(
    @Name VarChar(25),
    @Email VarChar(50),
    @Num Int
)
As
    Begin Tran
        Update Memos
        Set Name = @Name, Email = @Email
        Where Num = @Num
    Commit Tran
Go
Exec EditMemo '지리산', 'j@j.com', 5
Go
--[5] 삭제
Create Procedure dbo.DeleteMemo
    @Num Int
With Encryption
As
    Delete Memos
    Where Num = @Num
Go
Exec DeleteMemo 6
Go
--[6] 검색 : 저장 프로시저 -> 동적 쿼리문(SQL 인젝션 해킹 가능) -> 저장 프로시저
Create Proc dbo.FindMemos
    @SearchField VarChar(50),
    @SearchQuery VarChar(50)
As
    -- Name -> ' + 해당변수 + '
    Declare @strSql VarChar(255)
    Set @strSql = '
        Select *
        From Memos
        Where ' + @SearchField + ' Like ''%' + @SearchQuery + '%''
        Order By Num Desc
    '
    Exec(@strSql)
Go
Exec FindMemos 'Name', '지'
Go
Exec FindMemos 'Email', 'j'
Go
Exec GetMemos
Go
Exec FindMemos ' 1 = 1; Delete Memos; -- ', '홍길동'
Go
--[7] 검색 : 정적 쿼리문(저장 프로시저)
Create Proc dbo.SearchMemos
    @SearchField VarChar(50),
    @SearchQuery VarChar(50)    
As
    Set @SearchQuery = '%' + @SearchQuery + '%'
    Select * From Memos
    Where
    (
        Case @SearchField
            When 'Name' Then Name
            When 'Title' Then Title
        Else
            @SearchQuery
        End
    )
        Like
        @SearchQuery
    Order By Num Desc
Go
Exec SearchMemos 'Name', '한라산'
Go
-- 아래 구문은 실행되지 않는다.
Exec SearchMemos ' 1 = 1; Delete Memos; -- ', '홍길동'
Go
 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트

(댓글을 남기려면 로그인이 필요합니다.)

관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 UDL 파일 설정법 - 레드플러스 2008-06-24 8361
  20. 웹 사이트 DB 설계 미니 프로젝트 - 레드플러스 2003-12-05 10234
  RedPlus.sql - 레드플러스 2005-05-26 9433
  ShoppingDB.sql - 레드플러스 2005-05-30 9072
  ShoppingDB 데이터베이스 다이어그램 다운로드 권한이 없습니다. 레드플러스 2005-05-31 8428
  SQL Server 2005에서 반드시 알아야 할 사항(개발자) 총정리 - 레드플러스 2007-04-19 9758
현재글 SQL Server 2005에서 반드시 알아야 할 사항(개발자) 총정리 쿼리문 - 레드플러스 2007-04-19 9153
다음글 19. 백업과 복원 - 레드플러스 2003-12-05 9035
 
손님 사용자 Anonymous (손님)
로그인 Home