• SQL游标使用


    USE [WPSIV2]
    GO
    /****** Object:  StoredProcedure [dbo].[Proc_GetHotProduceByShopID]    Script Date: 01/17/2012 10:17:09 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    --
     Author     :  Isaac Zhang
    --
     Create date:  2011-1-11
    --
     Update date:
    --
     Parameter  :  @shopid 商铺ID,
    --
                     @topNum  前几位
    --
     Description:     根据商铺ID获取热门商铺信息,
    --
     =============================================
    ALTER PROCEDURE [dbo].[Proc_GetHotProduceByShopID]
        @shopid BIGINT,
        @topNum  INT
    AS
    BEGIN
        --需要返回的结果集
        CREATE TABLE #RESULT(
            pName VARCHAR(50),--商品名称
            saleNum INT,      --销售数量(最小单位计量)
            unit VARCHAR(50), --最小单位
            price DECIMAL(14,2)--商品总销售额
        )
        --创建临时表,作为处理的中间表
        CREATE TABLE #temp(
            pName VARCHAR(50),--商品名称
            saleNum INT,      --销售数量
            unit VARCHAR(50), --单位
            price DECIMAL(14,2)--商品总销售额
        )
        
        --声明过程中需要使用的临时参数
        DECLARE @sql VARCHAR(2000)
        DECLARE @pName VARCHAR(50),@unit VARCHAR(50)
        DECLARE @saleNum INT
        DECLARE @price DECIMAL(14,2)
        SET @sql = 'INSERT INTO #TEMP(pName,saleNum,unit,price) SELECT b.name,a.quantity,a.unit,a.cost FROM dbo.pt_sale a 
                    LEFT JOIN dbo.pt_product b
                    ON a.productid = b.productid
    '
        EXEC (@sql);
        --声明一个游标
        DECLARE produceCursor CURSOR    
        FOR SELECT TOP 5 pName,saleNum FROM #TEMP
        --打开一个游标    
        OPEN produceCursor
        --循环一个游标
        FETCH NEXT FROM  produceCursor INTO @pName,@saleNum
        
        WHILE @@FETCH_STATUS = 0
        BEGIN
            INSERT #RESULT
                    ( pName,saleNum, unit, price )
            VALUES  ( @pName-- pName - varchar(50)
                      0-- saleNum - int
                      @saleNum,  -- unit - varchar(50)
                      NULL -- price - decimal
                      )    
        FETCH NEXT FROM  produceCursor INTO @pName,@saleNum
        END    
                      
        --关闭游标
        CLOSE produceCursor
        --释放资源
        DEALLOCATE produceCursor

        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
        BEGIN TRANSACTION
        

            SELECT * FROM #RESULT;
        IF @@ERROR=0
        COMMIT
        ELSE
        ROLLBACK   
    END
  • 相关阅读:
    分享一个利用HTML5制作的海浪效果代码
    3人从小公寓创业,到世界最大引擎公司,Unity创始人谈14年...
    决策树--从原理到实现
    使用行为树(Behavior Tree)实现游戏AI
    FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
    相遇3000亿美金之巅,阿里腾讯战力与血值几何?
    深入浅出聊Unity3D项目优化:从Draw Calls到GC
    Unity性能优化专题---腾讯牛人分享经验
    高通创始人复盘30年发展历程
    Gym
  • 原文地址:https://www.cnblogs.com/zhangpan1244/p/2324388.html
Copyright © 2020-2023  润新知