zoukankan      html  css  js  c++  java
  • sql server 存储过程

    ---恢复内容开始---

    1、常用的系统存储过程

    1 exec sp_datebases --列出当前系统中的数据库
    1 exec sp_renamedb 'studb','studb1'   --修改数据库名称
    use stuDB
    exec sp_tables --返回当前环境下可查询的对象的列表
    exec columns stuInfo --返回表stuInfo 列的信息
    exec sp_help stuInfo --返回表stuInfo 的所有信息
    1 exec sp_helpconstraint stuInfo --查看表stuInfo的约束
    exec sp_helpindex stuInfo 列出表索引
    EXEC sp_helptext 'view_stuInfo_stuMarks'
    --查看显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本
    exec sp_stored_procedures  --查看当前数据库的存储过程
    --创建数据库bankDB,要求保存在D:ank
    
    USE master
    GO
    EXEC xp_cmdshell 'mkdir d:ank', NO_OUTPUT
    IF EXISTS(SELECT * FROM sysdatabases
                                WHERE name='bankDB')
       DROP DATABASE bankDB
    GO
    CREATE DATABASE bankDB
     (
      …
    )
    GO
    EXEC xp_cmdshell 'dir D:ank' --查看文件

    2.--.使用系统存储过程.查看用户表的约束、索引信息,并在D:project下创建子文件夹test

    1 use bbsDB
    2 go
    3 --启用xp_cmdshell命令
    4 exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'xp_cmdshell',1'reconfigure;
    1 exec sp_helpconstraint bbsuser
    exec sp_helpindex bbsuser

    3.

    --2、创建带参存储过程.请编写存储过程proc_find1,实现查找某个用户(假定为可卡因)的发贴情况,界面如下所示(上半部分为发表主贴的情况,下面为发表回贴的情况):

    --2、创建带参存储过程.请编写存储过程proc_find1,实现查找某个用户(假定为可卡因)的发贴情况,界面如下所示(上半部分为发表主贴的情况,下面为发表回贴的情况):
    drop proc proc_find1
    create procedure proc_find1
        @Uname varchar(15)
        as
            print '该用户发帖情况:'
            select Ttime,TclickCount,Ttopic,Tcontents 
            from bbsTopic
            inner join bbsUsers
            on bbsUsers.UID = bbsTopic.TuID
            where Uname=@Uname
    
            print '-------------------'
    
            print '该用户回帖情况:'
            select Rtime,RclickCount,Rcontents
            from bbsReply
            inner join bbsUsers
            on bbsUsers.UID = bbsReply.RuID
            where Uname= @Uname
        go
        EXEC proc_find1 @Uname='可卡因'
    --3、带输出参数的存储过程.编写存储过程proc_find2,查找某个用户的发贴情况,并返回发贴数和回贴数,界面如下所示(上半部分为发表主贴的情况,下面为发表回贴的情况):
    drop proc proc_find2
    create procedure proc_find2
        @num int output,
        @Uname varchar(15)
        as
            print '该用户发帖情况:'
            select Ttime,TclickCount,Ttopic,Tcontents 
            from bbsTopic
            inner join bbsUsers
            on bbsUsers.UID = bbsTopic.TuID
            where Uname=@Uname
    
            print '-------------------'
    
            print '该用户回帖情况:'
            select Rtime,RclickCount,Rcontents
            from bbsReply
            inner join bbsUsers
            on bbsUsers.UID = bbsReply.RuID
            where Uname= @Uname
    
            select @num= count(Ttopic)+count(Rcontents)
            from bbsTopic
            inner join bbsReply
            on bbsReply.RuID= bbsTopic.TuID
            where bbsReply.RuID=(select UID from bbsUsers where Uname=@Uname) and bbsTopic.TuID=(select UID from bbsUsers where Uname=@Uname)
    
        go
        --调用存储过程
        declare @sum int
        EXEC proc_find2 @sum output,'可卡因'
    
        print '小弟发帖和回帖较多,看来比较关心民众疾苦'
        print '总贴数:'+convert(varchar(5),@sum)
        go
    --4.带默认参数的存储过程.要求创建存储过程proc_find3,查询某个用户在某个版块的发贴情况(主贴+回贴),并返回发贴主数和从贴数。如果调用者没指定具体的版块,则默认为所有版块,界面如下所示(上半部分为“.NET方向”发表主贴的情况,下面为“.NET方向”发表回贴的情况):
    create procedure proc_find3
        @sum int output, --此参数只用于将信息从存储过程传输回应用程序。 
        @Uname varchar(15),
        @section varchar(32)='.NET'
        as
                    print @Uname+'该用户'+@section+'版块发帖情况:'
                    select Ttime,TclickCount,Ttopic,Tcontents 
                    from bbsTopic
                    inner join bbsUsers
                    on bbsUsers.UID = bbsTopic.TuID
                    where Uname=@Uname and bbsTopic.TsID=(select SID from bbsSection where Sname= @section)
    
                    print @Uname+'该用户'+@section+'版块回帖情况:'
                    select Rtime,RclickCount,Rcontents
                    from bbsReply
                    inner join bbsUsers
                    on bbsUsers.UID = bbsReply.RuID
                    where Uname=@Uname and bbsReply.RsID=(select SID from bbsSection where Sname= @section)
    
                    select @sum= count(TuID)+count(RuID)
                    from bbsTopic
                    inner join bbsReply
                    on bbsReply.RuID= bbsTopic.TuID
                    where (bbsReply.RuID=(select UID from bbsUsers where Uname=@Uname)and bbsReply.RsID=(select SID from bbsSection where Sname=@section)) 
                        and (bbsTopic.TuID=(select UID from bbsUsers where Uname=@Uname)and bbsTopic.TsID =(select SID from bbsSection where Sname=@section))
        go
        --调用带参数默认值的存储过程
        declare @sum int
        EXEC proc_find3 @sum output,'可卡因'
    
        print '小弟发帖和回帖较多,看来比较关心民众疾苦'
        print '总贴数:'+str(@sum)
        go
    
        drop proc proc_find3
    
    --5、带默认参数的存储过程.编写存储过程proc_findReply,查询某个主贴的所有回贴,并返回回贴的数量,界面如下所示:
    create  proc proc_findReply
        @total int output ,
        @TID int=6,
        @RSID int=2
        as
            select RID, RtID, RsID, RuID, Rface, Rcontents, Rtime, RclickCount from bbsReply
            inner join bbsTopic on bbsTopic.TsID =bbsReply.RsID
            where @RSID=RSID and @TID=TID
            select @total=count(RsID) from bbsReply where @RSID=RSID
        go
        declare @totalsum int 
        exec proc_findReply @totalsum output
        print '总贴数为'+str(@totalsum)
    
        drop  proc proc_findReply 

    ---恢复内容结束---

  • 相关阅读:
    java object bean 转map
    常用css
    mysql 生成max+1编号
    MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
    cookie记住账户密码
    session有效时间
    常用jstl
    高性能MySQL--innodb中事务的隔离级别与锁的关系
    mysql8.0.11的坑早知道
    git进阶--你可能不知道的很好用git功能
  • 原文地址:https://www.cnblogs.com/cxh1995/p/7111483.html
Copyright © 2011-2022 走看看