一个简单的SQL游标示例的存储过程
2012-08-10 13:06
471 查看
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 --提交事务
相关文章推荐
- 一个sql的存储过程的简单示例
- Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环
- 一个简单的带游标的存储过程
- sqlserver存储过程中利用游标遍历结果集简单示例及查询数据库时间
- 分页存储过程--一个简单的SQL存储过程
- 一个SQL存储过程面试题(比较简单)
- 一个简单的sql存储过程
- SQL____一个简单的存储过程
- 一个调试简单的存储过程的SQL语句。
- SQL存储过程游标调用存储过程示例
- 写了一个简单的对多游标控制的存储过程
- sql关于游标和游标、存储过程结合的一个例子
- SQL_编写一个简单的删除员工信息的存储过程
- SQL 游标的存储过程示例
- SQL点滴28—一个简单的存储过程
- 一个简单的SQl存储过程分页
- 一个SQL存储过程面试题(比较简单)
- 又一个不错的sql分页存储过程,支持排序、搜索
- sql 学习之主键选择、简单分页存储过程
- 修改用户定义数据类型对已经编译的存储过程的影响的示例.sql