블로그 이미지
Magic_kit
study 관련자료를 한곳으로 자기 개발 목적으로 재태크 재무 관리 목적으로 일상생활의 팁을 공유 하기 위하여 블로그를 개설 하였습니다.

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
반응형

Category

Recent Post

Recent Comment

Archive

'.Net Project/WindowServer2008'에 해당되는 글 44

  1. 2009.09.22 34장 방명록 애플리케이션 설계
  2. 2009.09.21 33장 도시락 주문 관리 프로그램
  3. 2009.09.18 32장 트리거(Trigger) 활용
  4. 2009.09.18 31장 트랜잭션 활용
2009. 9. 22. 15:52 .Net Project/WindowServer2008
반응형


 --방명록 테이블 설계
Create Table GuestBooks
(
    ItemID Int Identity(1,1) Primary Key,
    Name VarChar(25) Not Null,
    Content Varchar(8000) Not Null,
    Password VarChar(20) Not Null,
    PostDate SmallDateTime Default(GetDate()),
    PostIP VarChar(15)
)
Go

--예시문 6개 티이핑
--Insert Into GuestBooks Values('김용원',1234,GETDATE(),'192.168.10.133')
--Go
--Insert Into GuestBooks Values('이준철',4321,GETDATE(),'192.168.10.134')
--Go

Select *From GuestBooks

--샘플 데이터 100개 입력

 Declare @i Int
Set @i = 1
While @i <= 100
Begin
 If @i % 2 = 0
 Begin
         Insert Into GuestBooks Values('김용원', '안녕', '1234', GetDate
                                                    (),'127.0.0.1');
 End
 Else
 Begin
         Insert Into GuestBooks Values('이준철', '방가', '1234', GetDate
                                                    (),'127.0.0.1'); 
 End 
         Set @i = @i + 1
 End  
Go 

Select COUNT(*) From GuestBooks

--Select *From GuestBooks

--6개 저장 프로시저 생성 : 하세요

--입력

 Create Proc AddGuestBook
          @Name VarChar(25),
          @Content VarChar(8000),
          @Password VarChar(20),
          @PostIP VarChar(15)
 As  
          Insert Into GuestBooks Values(@Name,@Content, @Password,
                                                   GetDate(),@PostIP);
Go

--출력

Create Proc GetGuestBooks
As
         Select *From GuestBooks Order By ItemID Desc
Go

 



반응형
posted by Magic_kit
2009. 9. 21. 21:41 .Net Project/WindowServer2008
반응형

 
                                                      
   ↓
  
                                  ↓


-- 사람

 Create Table Members
(
 MemberID Int Identity(1, 1) Primary Key, -- 일련번호
 Name VarChar(25) Not Null     -- 이름 
)
Go

-- 메뉴
 Create Table Menu
(
 MenuID Int Identity(1, 1) Primary Key,  -- 일련번호
 MenuName VarChar(50) Not Null,    -- 메뉴명
 Price Int Not Null       -- 가격
)
Go

-- 주문
 Create Table Orders
(
   ItemID Int Identity(1, 1) Primary Key,   -- 일련번호
   MemberID Int References Members(MemberID),  -- 회원번호
   MenuID Int References Menu(MenuID),    -- 메뉴번호
   Status TinyInt Default(0),      -- 옵션 : 0(기본), 1(곱빼기)
   Quantity TinyInt,        -- 수량
   OrderedDate SmallDateTIme Default(GetDate()), -- 주문일시
   Etc VarChar(4000) Null         -- 기타
)
Go

-- 6개 예시문 연습
 Insert Members Values('홍길동')
Go
Insert Members Values('백두산')
Go
Insert Members Values('한라산')
Go

Select * From Members Order By MemberID Desc
Go
Select * From Members Where MemberID = 1
Go
Update Members Set Name = '임꺽정' Where Name = '홍길동'
Go
Delete Members Where MemberID = 1 And (1 <> 1)
Go
Select * From Members Where Name Like '홍%'
Go

--[!] 메뉴
 nsert Into Menu Values('돈까스', '3000')
Go
Insert Into Menu Values('돈까스, 밥빼기', '2500')
Go
Insert Into Menu Values('돈까스, 반찬추가', '3500')
Go

--[!] 주문
 Insert Into Orders Values(2, 1, 0, 1, GETDATE(), '빨리 가져다 주세요.')
Go
Insert Into Orders Values(1, 3, 0, 1, GETDATE(), '빨리 가져다 주세요.')
Go
Insert Into Orders Values(3, 1, 0, 1, GETDATE(), '빨리 가져다 주세요.')
Go

--[뷰] : 주문자 목록
-- 홍길동, 돈까스, 3000, 1개, 2009-09-21

 Create View [주문자목록]
 With Encryption
As
 SELECT    
           Members.Name, Menu.MenuName, Menu.Price, Orders.Quantity,
           Orders.OrderedDate, Orders.Etc
 FROM
         Members INNER JOIN Orders
         ON Members.MemberID = Orders.MemberID
         INNER JOIN Menu
         ON Orders.MenuID = Menu.MenuID
          --Order By OrderedDate Desc
Go

--[1] 저장 프로시저
-- 18개 저장 프로시저 만드세요~~~
-- 입력(Add, Insert, Write), 출력, 상세, 수정, 삭제, 검색

 Create Proc AddMember
         @Name VarChar(25)
As
         Insert Members Values(@Name)
Go

Create Proc GetMembers
As
        Select * From Members Order By MemberID Desc
Go

 Create Proc GetMemberByMemberID
          @MemberID Int
As
 Select * From Members Where MemberID = @MemberID
Go

 Create Proc UpdateMember
           @Name VarChar(25),
           @MemberID Int
As
 Update Members Set Name = @Name Where MemberID = @MemberID
Go

 Create Proc DeleteMember
          @MemberID Int
As
          Delete Members Where MemberID = @MemberID
Go

 Create Proc SearchMember
           @SearchQuery VarChar(50)
As 
         Declare @sql VarChar(500) -- 홍 -> ' + 변수 + '
         Set @sql = 'Select * From Members Where Name Like ''' + 
         @SearchQuery + '%'''
         Exec(@sql)
Go

 SearchMember '한라'
 Go

--[!] 메뉴 관련 저장 프로시저 6개 만들어보세요...
 Create Proc AddMenu
          @MenuName VarChar(25),
          @Price Int
As
    Insert Menu Values(@MenuName, @Price)
Go

Create Proc GetMenus
As
     Select * From Menu Order By MenuID Desc
Go


Create Proc GetMenuByMenuID
         @MenuID Int
As
          Select * From Menu Where MenuID = @MenuID
Go

 Create Proc UpdateMenu
         @MenuName VarChar(25),
         @Price Int,
         @MenuID Int
As
 Update Menu Set MenuName = @MenuName, Price = @Price Where 
  MenuID = @MenuID
Go



Create Proc DeleteMenu
         @MenuID Int
As
          Delete Menu Where MenuID = @MenuID
Go



Create Proc SearchMenu
 @SearchQuery VarChar(50)
As 
 Declare @sql VarChar(500) -- 홍 -> ' + 변수 + '
 Set @sql = 'Select * From Menu Where MenuName Like ''' + @SearchQuery + '%'''
 Exec(@sql)
Go

--[!] 주문 관련 저장 프로시저 6개

 Create Proc AddOrder
          @MemberID Int,
          @MenuID Int,
          @Status TinyInt,
          @Quantity TinyInt,
          @Etc VarChar(4000)
As
 Insert Into Orders(MemberID, MenuID, Status, Quantity, Etc)
 Values(@MemberID, @MenuID, @Status, @Quantity, @Etc)  
Go




Create Proc GetOrders
As
          Select * From Orders Order By OrderedDate Desc
Go
Create Proc GetOrder
          @ItemID Int
As
           Select * From Orders Where ItemID = @ItemID
Go


-- 일별 주문 상세

 Create Proc GetOrdersByDate
 @Year Int,
 @Month Int,
 @Day Int
As
 Select m.MenuName, Sum(o.Quantity), SUM(o.Quantity * m.Price)
 From Menu m, Orders o
 Where m.MenuID = o.MenuID
          And @Year = YEAR(GetDate())
          And @Month = Month(GetDate())
          And @Day = Day(GetDate())
          Group By m.MenuName
Go

GetOrdersByDate 2009, 09, 21
Go



Create Proc UpdateOrder
         @MemberID Int,
         @MenuID Int,
         @Status Bit,
         @Quantity TinyInt,
         @OrderedDate SmallDateTime,
         @Etc VarChar(4000),
         @ItemID Int
As
 Update Orders
 Set MemberID = @MemberID, MenuID = @MenuID, Status = @Status,
  Quantity = @Quantity, OrderedDate = @OrderedDate, Etc = @Etc
 Where ItemID = @ItemID  
Go


Default.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        TextBox1.Text = DateTime.Now.Year.ToString();
        TextBox2.Text = DateTime.Now.Month.ToString();
        TextBox3.Text = DateTime.Now.Day.ToString();
       
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        this.SqlDataSource1.Insert();
        this.SqlDataSource1.DataBind();

         this.SqlDataSource1.Insert();
         this.SqlDataSource1.DataBind();
    }
}


MemberWeb.Aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AddMember : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
  

       this.SqlDataSource1.Insert();

        
    }
}


MenuWeb.Aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AddMenu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

      this.SqlDataSource1.Insert();
       
    }
}



반응형
posted by Magic_kit
2009. 9. 18. 11:09 .Net Project/WindowServer2008
반응형

--트리거(방아쇠) : 구매(주문), 재고테이블 :
--한명 하나의 상품을 구매하면, 재고 테이블에서
-- 해당 재고량을 1감소를 자동처리해주는 시스템 : 주로 저장 프로시저 사용

--[0] 트리거 연습용 테이블 생성
use tempdb
Create Table dbo.[SellTable]
(
 CustomerID int, --고객번호
 ProductID int,  --상품번호
 Quantity int,   --주문수량
)
Go

Create table dbo.[SaveTable]
(
 ProductID int, --상품번호
 Quantity int   --재고수량
)     
Go

--[1]SaveTable (재고테이블)에 1번, 2번 제품을 10개 넣어 놓음(가상)
Insert SaveTable values(1,10), (2,10)
Select *From [SaveTable]


--[2]구매가 한번 이루어지면 자동으로 재고테이블에서 감소시키는 트리거 생성
Create Trigger AutoSaveMinus --자동제거감소
ON [SellTable]
For Insert --구매 테이블에 데이터가 입력되는 순간
As
 Update [SaveTable]
 Set Quantity = Quantity -1
 
 Print '재고테이블에서 1개 감소했습니다'
Go 

--[3] SellTable(구매테이블)에 Insert문을 실행시켜 본다
Insert [SellTable] Values(1,1,1)


--[4] 트리거에 의해 재고테이블의 모든 필드값이 자동으로 감소됨을 알 수 있다 .
Select *From [SaveTable]


--[5]트리거를 수정해보자 : 구매개수만큼 줄이도록 수정
Alter Trigger [AutoSaveMinus] --자동제거감소

On[SellTable]
For Insert
As
 Declare @ProductID Int
 Declare @Quantity Int
 
 Set @ProductID = 0
 Set @Quantity = 0
 
 Select *From [SellTable] --구매 테이블 출력 


 
 Select
  @ProductID = ProductID,
  @Quantity = Quantity
 From Inserted  --Inserted에 의해서 입력된 데이터 받아옴
 
 Update [SaveTable]
 Set Quantity = Quantity - @Quantity
 Where ProductID = @ProductID
 
Go

Select *From [SellTable]
Select *From [SaveTable]

--[6] 1번 제품만을 1개 감소
Insert [SellTable] Values(1,1,1)



--[7] 2번 제품만 3개 감소
Insert [SellTable] Values(1,2,3)


--[8] 트리거 삭제
Drop Trigger [AutoSaveMinus]
--[!] [AutoSaveMinus]자동재고감소와 동일한 기능을 하는 입력 저장 프로시저
Create Procedure dbo.[ProcAutoSaveMinus] --자동재고감소프로시저
 @CustomerID Int,
 @ProductID Int,
 @Quantity Int
As
 Begin Tran
  Insert [SellTable] Values(@CustomerID,@ProductID,@Quantity)
  
  Update [SaveTable]
  Set Quantity = Quantity - @Quantity
  Where ProductID = @ProductID
  
  Select *From [SaveTable]
 Commit Tran
Go
Exec [ProcAutoSaveMinus] 1,2,3
Go  


 


반응형
posted by Magic_kit
2009. 9. 18. 11:08 .Net Project/WindowServer2008
반응형

 use tempdb
Create Table dbo.TranTest
(
 Num Int Identity(1,1) Not Null Primary Key,
 Name VarChar(25) Not Null,
 PostDate SmallDateTime Default(GetDate())
)
Go

--샘플 데이터 입력
Insert Into TranTest(Name) Values ('홍길동'),('한라산'),('백두산')
Go

--출력
Select *From TranTest
Go


--[4] 트랜잭션 테스트(롤백) : Begin Tran ~ Rollback Tran
--[a] 트랜잭션 시작

Begin Tran

--[b] SQL 구문 실행
Delete TranTest Where Num = 2

--[c] 트랜잭션 롤백 : 트랜잭션 이전으로 상태 되돌리기(구문취소...)
RollBack Tran

-- [5] 트랜잭션 처리 :Begin Tran ~ Commit Tran
--에러가 발생하는 구문이 나오면 RooBack 하는 방식으로 사용  

Begin Tran
 Delete TranTest Where Num=2 --[5-1]성공
 Select aaa From aaa -- [5-2]실패 
 Delete TranTest Where Num =3 --[5-3] 실행되지 않는다

 If @@ERROR > 0
  RollBack Tran
Commit Tran


--[6] 트랜잭션 별칭 부여
Begin Tran DeleteData
 Delete TranTest Where Num = 3
 Select *From TranTest
RollBack Tran DeleteData

--[7] 다중 트랜잭션 처리
Begin Tran
 Delete TranTest Where Num = 6
 Begin Tran
  Delete TranTest Where Num = 7
  Select @@TRANCOUNT -- 2개
RollBack Tran --전체 트랜잭션을 되돌린다   
-- Commit Tran

--[8] 트랜잭션 단계 확인
Begin Tran
 Update TranTest Set Name = '트랜잭션1' Where Num = 8
 Begin Tran
 Update TranTest Set Name = '트랜잭션2' Where Num = 9
  Select @@TRANCOUNT --2개
RollBack Tran --전체 트랜잭션 되돌린다
--Commit Tran   

--[9] 트랜잭션의 주요 사용
Begin Tran
 Insert Into TranTest(Name) Values('홍길동')
 Update TranTest Set Name = '트랜잭션1' Where Num = 14
 
 Insert Into TranTest(Name) Values('홍길동')
 
 If @@ERROR > 0 --명시적으로 트랜잭션 되돌리기
 Begin 
  RollBack Tran
 End
Commit Tran   


반응형
posted by Magic_kit