<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 39,  comments - 44,  trackbacks - 0

    --創(chuàng)建數(shù)據(jù)庫(kù)
    use master
    go
    if exists(select * from sysdatabases where name = 'BankDB')
    drop database BankDB
    go
    exec xp_cmdshell 'md E:\朱礦龍',NO_OUTPUT
    create database BankDB
    go
    use BankDB
    --創(chuàng)建帳戶信息表AccountInfo
    if exists(select * from sysobjects where name = 'AccountInfo')
    drop table AccountInfo
    go
    create table AccountInfo
    (
    CustID int identity(1,1) primary key,
    CustName varchar(20) not null,
    IDCard varchar(18) check(len(IDCard) = 15 or len(IDCard) = 18),
    TelePhone varchar(13) check(len(TelePhone)=11 or len(TelePhone) like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' or len(TelePhone) like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ,
    Address varchar(50) default '地址不詳'
    )
    go
    --創(chuàng)建信用卡信息表CardInfo
    if exists(select * from sysobjects where name = 'CardInfo')
    drop table CardInfo
    go
    create table CardInfo
    (
    CardID varchar(19) check(len(CardID)=19) primary key,
    CardPassWord varchar(6) default'888888',
    CustID int references AccountInfo(CustID),
    SaveType varchar(10) not null check(SaveType in('活期','定期')),
    OpenDate datetime not null default(getdate()),
    OpenMoney money not null check(OpenMoney >= 1),
    LeftMoney money not null check(LeftMoney >= 1),
    IsLoss varchar(2) not null check(IsLoss in('是','否')) default '否'
    )
    go
    --創(chuàng)建交易信息表TransInfo
    if exists(select * from sysobjects where name = 'TransInfo')
    drop table TransInfo
    go
    create table TransInfo
    (
    CardID varchar(19) not null,
    TransType varchar(4) not null check(TransType in('存入','支取')),
    TransMoney money not null check(TransMoney > 0),
    TransDate datetime default(getdate())
    )
    go


    -------------------------------插入測(cè)試數(shù)據(jù)-------------------------------------
    ---為AccountInfo表插入測(cè)試數(shù)據(jù)
    insert into AccountInfo values('孫悟空','422322123902140019','027-8888988','花果山')
    insert into AccountInfo values('唐僧','422322001902140019','027-8536896','大唐')
    insert into AccountInfo values('沙和尚','410334020157144719','13295654665','通天河')
    ---為CardInfo表插入測(cè)試數(shù)據(jù)
    insert into CardInfo values('1027 3726 1536 1135',default,1,'定期',default,500.00,500.00,default)
    insert into CardInfo values('1029 3526 1235 1235',default,2,'活期',default,1500.00,1500.00,default)
    insert into CardInfo values('1324 7532 1536 1935',default,3,'活期',default,4500.00,4500.00,default)


    ---表的查看
    select * from AccountInfo

    select * from CardInfo

    select * from TransInfo

    -----------------T-SQL----------------------------
    --孫悟空修改密碼
    update CardInfo set CardPassWord = 611234 where CustID = 1

    --孫悟空取錢
    --事務(wù)開(kāi)始
    begin transaction tran_Qu
    --定義一個(gè)用于記錄錯(cuò)誤的變量
    declare @tran_error int
    set @tran_error = 0;
    --將孫悟空交易進(jìn)行記錄
    insert into TransInfo values('1027 3726 1536 1135','支取',200.00,getdate())
    set @tran_error = @tran_error + @@error
    --從孫悟空的帳戶中減去200.00
    update CardInfo set LeftMoney = LeftMoney - 200
    where CardID = '1027 3726 1536 1135'
    set @tran_error = @tran_error + @@error
    if @tran_error <> 0
       begin
          --執(zhí)行錯(cuò)誤,回滾事務(wù)
          rollback transaction
          print '支取失敗,交易已取消'
       end
    else
      begin
        --沒(méi)有發(fā)現(xiàn)錯(cuò)誤,提交事務(wù)
        commit transaction
        print'交易成功,已保存新數(shù)據(jù)'
      end
    go
    select * from CardInfo where CustID = 1

    --沙和尚存錢
    begin transaction tran_bring
    declare @tran_error int
    set @tran_error = 0;
    insert into TransInfo values('1324 7532 1536 1935','存入',1200.00,getdate())
    set @tran_error = @tran_error + @@error
    update CardInfo set LeftMoney = LeftMoney + 1200
    where CardID = '1324 7532 1536 1935'
    set @tran_error = @tran_error + @@error
    if @tran_error <> 0
       begin
          rollback transaction
          print '存入失敗,交易已取消'
       end
    else
      begin
        commit transaction
        print'交易成功,已保存新數(shù)據(jù)'
      end
    go
    select * from CardInfo where CustID = 3

    --唐僧卡丟失
    update CardInfo set IsLoss='是' where CustID = 2

    --查詢最近10開(kāi)戶的銀行卡信息
    select * from CardInfo where datediff(dd,OpenDate,getdate()) <= 10

    --查詢最大交易的卡信息
    declare @maxMoney money
    select @maxMoney = max(TransMoney) from TransInfo
    select * from CardInfo where CardID in(select CardID from TransInfo where TransMoney = @maxMoney)

    --查詢交易信息表中總的交易
    declare @allMoney money
    declare @QuMoney money
    declare @CunMoney money
    select @allMoney = sum(TransMoney) from TransInfo
    select @QuMoney = sum(TransMoney) from TransInfo where TransType = '支取'
    select @CunMoney = sum(TransMoney) from TransInfo where TransType = '存入'
    print '總交易金額:' + convert(varchar(10),@allMoney)
    print '支取交易金額:' + convert(varchar(10),@QuMoney)
    print '存入交易金額:' + convert(varchar(10),@CunMoney)

    --給交易信息表加上非聚集索引,并利用非聚集索引查詢數(shù)據(jù)
    if exists(select * from sysobjects where name = 'IX_CardID')
    drop index BankDB.IX_CardID
    go
    create nonclustered index IX_CardID
    on TransInfo(CardID)
    with fillfactor = 30
    go
    select * from TransInfo with(index = IX_CardID) where CardID = '1324 7532 1536 1935'

    --查詢掛失的賬戶信息
    select * from AccountInfo where CustID in(select CustID from CardInfo where IsLoss = '是')


    --賬戶信息視圖
    if exists(select * from sysobjects where name = 'view_AccountCardInfo')
    drop view view_AccountCardInfo
    go
    create view view_AccountCardInfo
    as
    select AccountInfo.CustID '帳戶編號(hào)',CustName '帳戶姓名',IDCard'身份證號(hào)碼',TelePhone'客戶電話',Address'客戶地址',
            CardID'信用卡編號(hào)',SaveType'儲(chǔ)蓄類型',OpenDate'開(kāi)戶日期',OpenMoney'開(kāi)戶金額',IsLoss'是否掛失'
    from AccountInfo join CardInfo
    on AccountInfo.CustID = CardInfo.CustID
    go
    select * from view_AccountCardInfo

    --交易信息視圖
    if exists(select * from sysobjects where name = 'view_TransInfo')
    drop view view_TransInfo
    go
    create view view_TransInfo
    as
    select CardID '卡號(hào)',TransType '交易類型',TransMoney '交易金額',TransDate '交易時(shí)間'
    from TransInfo
    go
    go
    select * from view_TransInfo

    ---------------第三階段----------------
    --------T-SQL-------------
    if exists(select name from sysobjects where name = 'Tri_TransInfo_Insert')
    drop trigger Tri_TransInfo_Insert
    go
    create trigger Tri_TransInfo_Insert on TransInfo for insert
    as
     declare @TempTransType varchar(10)     --定義臨時(shí)的變量存放交易類型
     declare @TempTransMoney money          --定義臨時(shí)的變量存放交易金額
     declare @TempCardID varchar(19)        --定義臨時(shí)的變量存放卡號(hào)
     declare @TempLeftMoney money           --定義臨時(shí)的變量存放客戶的余額
     
    --從inserted臨時(shí)表中取出數(shù)據(jù)賦值
    select @TempTransType = TransType,@TempTransMoney = TransMoney,@TempCardID = CardID
    from inserted
    select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID

    if(@TempTransType = '支取')      
      begin
        if(@TempLeftMoney - @TempTransMoney >=1)  
           begin
              update CardInfo set LeftMoney = @TempLeftMoney - @TempTransMoney where CardID = @TempCardID
              print '交易成功!'
           end
         else
           begin
              rollback transaction
              print '余額不足,交易失敗!'
           end
      end
    else
      begin
        update CardInfo set LeftMoney = @TempLeftMoney + @TempTransMoney where CardID = @TempCardID
        print '交易成功!'
      end
    select @TempLeftMoney = LeftMoney from CardInfo where CardID = @TempCardID  
    print '卡號(hào):' + convert(varchar(19),@TempCardID) + '  余額:' + convert(varchar(10),@TempLeftMoney)
    go
    set nocount on   --不顯示語(yǔ)句影響記錄行數(shù)
    --測(cè)試觸發(fā)器,沙和尚支取
    insert into TransInfo(CardID,TransType,TransMoney) values('9645 9087 9371 4492','支取',500)
    go

    select * from TransInfo
    select * from accountinfo
    select * from CardInfo

    --利用存儲(chǔ)過(guò)程實(shí)現(xiàn)備份交易信息的業(yè)務(wù)
    if exists(select *from sysobjects where name = 'Proc_Backup_TransInfo')
        drop procedure Proc_Backup_TransInfo
    go
    create procedure Proc_Backup_TransInfo
    @BackupDate datetime
    as
    declare @MyError int
    set @MyError = 0
    print '開(kāi)始備份......'
    if exists(select * from sysobjects where name ='Back_TransInfo')
    begin
     begin tran 
     insert into Back_TransInfo select * from TransInfo where datediff(dd,TransDate,getdate()) >=0
    set @MyError = @MyError + @@error
    if @MyError != 0
       begin
           rollback transaction
          print '備份失敗'
       end
    else
      begin
          commit transaction
           print'備份成功'
       end
      end
    else
      begin
        begin tran 
        select * into Back_TransInfo from TransInfo where datediff(dd,TransDate,getdate()) >=0
        set @MyError = @MyError + @@error
    if @MyError != 0
       begin
          rollback transaction
          print '備份失敗!'
       end
    else
       begin
          commit transaction
          print '備份成功!'
       end
    end
    go
    insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate()) 
    insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
    insert into TransInfo values('1324 7532 1536 1935','支取',500.00,getdate())
    declare @BackDate datetime
    set @BackDate = getDate()
    exec Proc_Backup_TransInfo '2008-10-31'
    go
    select * from Back_TransInfo

    --實(shí)現(xiàn)銀行卡的存儲(chǔ)過(guò)程
    if exists(select * from sysobjects where name = 'Proc_GetCardID')
        drop procedure Proc_GetCardID
    go
    create procedure Proc_GetCardID
    @CardID varchar(19) output
    as
    declare @TempRand numeric(18,16)
    declare @TempStr varchar(18)
    set @TempRand = rand(datepart(ms,getdate())*10000)
    set @TempStr = convert(varchar(18),@TempRand)
    set @CardID = substring(@TempStr,3,4)+' '+substring(@TempStr,7,4)+' '+substring(@TempStr,11,4)+' '+substring(@TempStr,15,4)
    go
    declare @MyCardID varchar(19)
    exec Proc_GetCardID @MyCardID output
    print '產(chǎn)生的隨即卡號(hào)是:' + @MyCardID
    go

    --實(shí)現(xiàn)開(kāi)戶的存儲(chǔ)過(guò)程
    if exists(select * from sysobjects where name = 'Proc_OpenAcount')
        drop procedure Proc_OpenAcount
    go
    create procedure Proc_OpenAcount
    @CustName varchar(20),
    @IDCard varchar(18),
    @Telephone varchar(13),
    @OpenMoney money = 1,
    @SaveType varchar(10) = '活期',
    @Address varchar(50)= '地址不詳'
    as
     declare @MyCardID varchar(19)
     declare @MyCustID int
     exec Proc_GetCardID @MyCardID output
    while(1=1)
     begin
     if exists(select * from CardInfo where CardID = @MyCardID)
     exec Proc_GetCardID @MyCardID output
    else
     break
     end
    insert into AccountInfo values(@CustName,@IDCard,@TelePhone,@Address)  
    select @MyCustID = CustID from AccountInfo where IDCard = @IDCard      
    insert into CardInfo values(@MyCardID,default,@MyCustID,@SaveType,default,@OpenMoney,@OpenMoney,default)
    print '尊敬的客戶:' +@CustName +'開(kāi)戶成功,卡號(hào)為:'+@MyCardId

    print '產(chǎn)生的隨機(jī)卡號(hào)為:' + @MyCardID
    exec Proc_OpenAcount '白骨精','245687556977812345','12478964568'
    exec Proc_OpenAcount '嫦娥公主','745687476912812335','14796653141',@Address = '月亮'

    ----銷戶
    if exists(select * from sysobjects where name = 'Proc_DropAcount')
        drop procedure Proc_DropAcount
    go
    create procedure Proc_DropAcount
     --@CardID varchar(19)
    @IDCard varchar(18) --身份證號(hào)
    as
    declare @TempCustID int
    declare @TempLeftMoney money
    --select @TempCustID = CustID from CardInfo where CardID = @CardID 
    --select @TempLeftMoney = LeftMoney from CardInfo where CardID = @CardID
    print '該帳戶余額:' +convert(varchar(10),@TempLeftMoney)+'正在取出。。。'
    delete from CardInfo where custid in(select custid from accountinfo where IDCard=@IDCard)
    delete from  AccountInfo where IDCard=@IDCard
    go
    declare @CardID varchar(19)
    select @CardID = CardID from CardInfo where CustID in(select CustID from AccountInfo where CustName = '唐僧')
    exec Proc_DropAcount '422322001902140019'--根據(jù)身份證號(hào)刪除
    go
    ---表的查看
    select * from AccountInfo
    select * from CardInfo

    posted on 2008-10-31 19:31 礦礦 閱讀(505) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲综合精品第一页| 另类图片亚洲校园小说区| 亚洲日本国产综合高清| 免费国产污网站在线观看| 破了亲妺妺的处免费视频国产| 精品亚洲综合久久中文字幕| 亚洲人成无码网站在线观看 | 免费中文字幕一级毛片| AAAAA级少妇高潮大片免费看| 亚洲精品乱码久久久久久下载| 午夜视频在线观看免费完整版| 一级特黄录像免费播放肥| 亚洲伊人色一综合网| 亚洲精品亚洲人成在线观看下载 | 免费人成在线观看网站品爱网| 亚洲一区欧洲一区| 精品香蕉在线观看免费| 黄色毛片免费在线观看| 亚洲视频免费在线看| 国产成人亚洲影院在线观看| 无码人妻一区二区三区免费| 二个人看的www免费视频| 亚洲午夜无码久久| 亚洲午夜视频在线观看| gogo全球高清大胆亚洲| 四虎影视永久在线精品免费| 亚洲国产一区二区三区| 无码人妻久久一区二区三区免费丨| 久草免费福利在线| 久久亚洲AV成人无码国产最大| 亚洲综合无码一区二区三区| 国产成人麻豆亚洲综合无码精品| 国产免费一区二区三区免费视频| 亚洲а∨天堂久久精品9966 | 久久久久久久国产免费看 | 久久久久亚洲国产| 老汉色老汉首页a亚洲| 国产在线jyzzjyzz免费麻豆 | 国产成人免费网站| 无码国产精品一区二区免费3p| 亚洲国产成人精品久久|