zoukankan      html  css  js  c++  java
  • 一个简单的SQL游标示例的存储过程

    USE [Princess]
    GO
    /****** Object:  StoredProcedure [dbo].[p_PaymentTransactions_Insert]    Script Date: 08/10/2012 10:33:12 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[p_PaymentTransactions_Insert]
        @PaymentID integer, @InvoiceNo varchar(10), @BalanceAmount decimal(14,2),@MatchBy int
    AS
        declare @InvoiceIDs varchar(200)
        declare @Balance money
        declare @No varchar(50)
    
        BEGIN TRANSACTION  --事务开始
        insert into Payment_Transactions (PaymentID, InvoiceNo,BalanceDate,BalanceAmount,MatchBy,MatchDate)
        values(@PaymentID, @InvoiceNo,getdate(),@BalanceAmount,@MatchBy,getdate())
    
        select @Balance = Balance from Payments where PaymentID = @PaymentID
        set @Balance = @Balance - @BalanceAmount
        
        --游标读取InvoiceIDs
        declare rs cursor for select InvoiceNo from Payment_Transactions where PaymentID = @PaymentID
        open rs
        fetch next from rs into @No
        while @@FETCH_STATUS=0
        BEGIN
            IF @InvoiceIDs != ''
            BEGIN
                IF CHARINDEX(@No,@InvoiceIDs)<=0 --函数CHARINDEX()判断@InvoiceIDs变量中是否包含@No变量里面的内容
                BEGIN
                    set @InvoiceIDs = isnull(@InvoiceIDs, '') + @No + ','
                END
            END
            ELSE
            BEGIN
                set @InvoiceIDs = @No + ','
            END
            
            fetch next from rs into @No
        end
        close rs
        deallocate rs
        --游标结束
        
        SET @InvoiceIDs = SUBSTRING(@InvoiceIDs,1,LEN(@InvoiceIDs)-1) --去除@InvoiceIDs变量中末尾","
        update Payments set Balance =  @Balance, InvoiceIDs = @InvoiceIDs where PaymentID = @PaymentID
        
        exec p_UpdateInvoice_Balance @InvoiceNo  --调用另外一个存储过程
        
        COMMIT TRANSACTION  --提交事务
  • 相关阅读:
    解释DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    MySQL性能优化
    MySQL中的binlog相关命令和恢复技巧
    保障MySQL安全的14个最佳方法
    MySQL忘记root密码的解决方案
    MySQL利用binlog来恢复数据库
    MySQL命令mysqldump参数大全
    MySQL REPLACE替换输出
    MySQL -A不预读数据库信息(use dbname 更快)
    MySQL 慢查询配置
  • 原文地址:https://www.cnblogs.com/captainR/p/2631690.html
Copyright © 2011-2022 走看看