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  --提交事务
  • 相关阅读:
    android 回调的理解(结合接口)
    Android Bundle、Handler和Message类介绍
    Android: Intent实现活动之间的交互
    Condition实现一个生产者一个消费者
    condition实现通知部分线程
    Condition实现等待、通知
    ReentrantLock简单实现2
    ReentrantLock的简单使用
    线程通信-基于字符流管道
    线程通信-基于字节流管道
  • 原文地址:https://www.cnblogs.com/captainR/p/2631690.html
Copyright © 2011-2022 走看看