• SQL存储过程学习笔记


    一、创建临时表

    1.系统

    例子1:创建tempCategory,每一列定义在括号中;

    if object_id('tempdb..#tempCategory') is not null    drop table #tempCategory
        create table #tempCategory(
            num int,
            CGName varchar(50),
            CGID int,
            PartnerID int,
            UpdTime datetime,
            Operator varchar(50)
        )

    2.with as

    例子1:创建临时表,名称:tempTable 。往临时表中填充数据;

    with tempTable as
        (select a.* from Category a , f_cid(@CGID) b where a.CGID = b.id  )
    select CGType,count(1) as TypeCount from tempTable group by CGType

    例子2:

     WITH TEMPTABLE AS 
     ( SELECT KEYID,TITLE,D3KEY,TITLELINK,MODIFYDATE,PUBDATE,REVOKEDATE,PCIMAGEURL,ISTOP,SORTINDEX,CATEID,BPUSHINFO,ABSTRATS,ROW_NUMBER() OVER(ORDER BY SORTINDEX DESC) AS ROW  FROM INFORMATION  WHERE PUBDATE >= '2013-03-12' AND PUBDATE < '2013-03-13' AND CATEID = 1 ), 
     
     TEMPTABLE2 AS 
     ( SELECT * FROM TEMPTABLE WHERE ISTOP=1 
     UNION ALL 
     SELECT *  FROM TEMPTABLE WHERE GETDATE()< REVOKEDATE AND GETDATE()>PUBDATE AND ISTOP <> 1 
     UNION ALL 
     SELECT *  FROM TEMPTABLE WHERE GETDATE()> REVOKEDATE AND ISTOP <> 1) 
     
     SELECT (SELECT COUNT(1) FROM TEMPTABLE2) AS TOTALCOUNT,KEYID,TITLE,D3KEY,TITLELINK,MODIFYDATE,PUBDATE,REVOKEDATE,PCIMAGEURL,ISTOP,SORTINDEX,CATEID,BPUSHINFO,ABSTRATS,ROW  FROM TEMPTABLE2 WHERE ROW BETWEEN 1 AND 5

     说明:

      第一部分:创建临时表TEMPTABLE ,往里面填充数据;

      第二部分: 创建临时表TEMPTABLE2,往里面填充筛选后的TEMPTABLE 的数据;

            具体:TEMPTABLE2对TEMPTABLE中的数据重新排序,然后 UNION ALL 连接顺序如下:

            1、Istop=1(置顶信息);

            2、 GETDATE()< REVOKEDATE AND GETDATE()>PUBDATE AND ISTOP <> 1(非置顶信息中大于发布时间而小于下线时间的信息,即今天正在向线上的信息;)

            3、GETDATE()> REVOKEDATE AND ISTOP <> 1(非指定信息中当前日期大于下线时间,即已经下线的信息)

    二、SQL分页

    ALTER PROCEDURE [dbo].[CategoryList_FirstLevelList] 
        @CGName varchar(50),
        @pagesize int,
        @pageindex int,
        @total int output
    AS
    BEGIN
        declare @strsql varchar(3000),@strcondition varchar(200),
        @subsql varchar(500),@frmindex int,@endindex int,@partnerid2 int
    
        set @strcondition=' where CGType=1'
        if(@CGName!='' and @CGName is not null)
            set @strcondition=@strcondition+' and CGName like ''%'+ @CGName+'%'''
    
        set @frmindex=(@pageindex-1)*@pagesize
        set @endindex=@pageindex*@pagesize
    
        set @subsql='select row_number() over(order by CID) as num,CGName,CGID,PartnerID,UpdTime,Operator from Category'
        set @strsql='select * from ('+@subsql+@strcondition+') tb'
    
        if object_id('tempdb..#tempCategory') is not null drop table #tempCategory
        create table #tempCategory(
            num int,
            CGName varchar(50),
            CGID int,
            PartnerID int,
            UpdTime datetime,
            Operator varchar(50)
        )
        
        
        print(@strsql)
        insert into #tempCategory exec(@strsql)    --往临时表中填充数据(执行SQL语句)
        select @total=count(1) from #tempCategory
        select CGName,CGID,c.PTID,isnull(c.partner,'') as PTname,c.[Status] as PStatus,UpdTime,Operator from #tempCategory a
        left join partners c on a.PartnerID=c.PTID        
        where num>@frmindex and num<=@endindex
        order by num
    END

     三、事务

    ALTER PROCEDURE [dbo].[Category_ChangeUpdTypeMult] 
        @CGID varchar(2000), 
        @Operator varchar(200),
        @UpdType varchar(50),
        @result int output
    AS
    BEGIN
        DECLARE @SQL VARCHAR(2000)
        set @result=1
        begin transaction mytrans
            SET @SQL = N'update Category set UpdType='''+@UpdType+''',UpdTime=GETDATE(),Operator='''+@Operator+''' where CGID in('+@CGID+')'
            EXEC(@SQL)
            if @@error<>0
            begin    
                set @result=0
                rollback transaction mytrans
                return
            end
        commit transaction mytrans        
    END
  • 相关阅读:
    未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
    GridView选中行变色
    GridView 添加/删除行
    Session、Cookie、Application、ViewState和Cache 这四者的区别
    后台动态给textbox的字体颜色赋值
    JS来判断文本框内容改变事件
    gridview JS控件赋值后如何取值
    c#如何把8位字符串转换成日期格式
    从今天起,热爱生活
    杂得得杂
  • 原文地址:https://www.cnblogs.com/wxh19860528/p/2955709.html
Copyright © 2020-2023  润新知