带有循环的存储过程

CREATE PROC usp_BatchExecSql
AS
BEGIN
SELECT IDENTITY(INT,1,1) AS id,* INTO #temp FROM dbo.BatchExecSql --把表数据插入临时表中,IDENTITY(INT,1,1)自增字段
DECLARE @index INT=2; --从1开始
DECLARE @count INT;
DECLARE @_Column1 VARCHAR(200);--要指定大小,不然默认是1
DECLARE @_Column2 VARCHAR(200);
DECLARE @_Column3 VARCHAR(200);
DECLARE @_Column4 VARCHAR(200);
DECLARE @_Column5 VARCHAR(200);
DECLARE @_Column6 VARCHAR(200);
SET @count=(SELECT COUNT(*) FROM #temp); --行数
WHILE @index<[email protected] --循环条件
BEGIN

SELECT @_Column1=Column1,@_Column2=Column2,@_Column3=Column3,@_Column4=Column4,@_Column5=Column5,@_Column6=Column6 FROM #temp WHERE [email protected];
IF @_Column1 IS NOT NULL --如果为空
BEGIN
IF EXISTS(SELECT ID FROM dbo.AP_INVOICES WHERE STATUS=‘Ready to Post‘ AND BookingCode=(SELECT ID FROM dbo.AP_DISTRIBUTOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column1))) AND AP_VENDOR_ID in (SELECT VENDORID FROM dbo.AP_DISTRIBUTOR_VENDOR WHERE VENDORID IN(SELECT ID FROM dbo.AP_VENDOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column4))) AND DISTRIBUTORID=(SELECT ID FROM dbo.AP_DISTRIBUTOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column1))) GROUP BY VENDORID) AND RTRIM(LTRIM(INVOICE_NUM))=RTRIM(LTRIM(@_Column5)) AND RTRIM(LTRIM(TOTAL))=CAST(RTRIM(LTRIM(@_Column6)) AS MONEY)) BEGIN UPDATE dbo.AP_INVOICES_CSTM SET BATCH_NUM_C=RTRIM(LTRIM(@_Column2)),BATCH_DATE_C=CAST(RTRIM(LTRIM(@_Column3)) AS DATETIME) WHERE ID_C in (SELECT ID FROM dbo.AP_INVOICES WHERE STATUS=‘Ready to Post‘ AND BookingCode=(SELECT ID FROM dbo.AP_DISTRIBUTOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column1))) AND AP_VENDOR_ID in (SELECT VENDORID FROM dbo.AP_DISTRIBUTOR_VENDOR WHERE VENDORID IN(SELECT ID FROM dbo.AP_VENDOR WHERE DELETED=0 AND CODE=RTRIM(LTRIM(@_Column4))) AND DISTRIBUTORID=(SELECT ID FROM dbo.AP_DISTRIBUTOR WHERE DELETED=0 AND CODE=RTRIM(LTRIM(@_Column1))) GROUP BY VENDORID) AND RTRIM(LTRIM(INVOICE_NUM))=RTRIM(LTRIM(@_Column5)) AND RTRIM(LTRIM(TOTAL))=CAST(RTRIM(LTRIM(@_Column6)) AS MONEY)); UPDATE dbo.AP_INVOICES SET STATUS=‘Closed‘,DATE_MODIFIED=GETDATE() WHERE ID in (SELECT ID FROM dbo.AP_INVOICES WHERE STATUS=‘Ready to Post‘ AND BookingCode=(SELECT ID FROM dbo.AP_DISTRIBUTOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column1))) AND AP_VENDOR_ID in (SELECT VENDORID FROM dbo.AP_DISTRIBUTOR_VENDOR WHERE VENDORID IN(SELECT ID FROM dbo.AP_VENDOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column4))) AND DISTRIBUTORID=(SELECT ID FROM dbo.AP_DISTRIBUTOR WHERE DELETED=0 AND RTRIM(LTRIM(CODE))=RTRIM(LTRIM(@_Column1))) GROUP BY VENDORID) AND RTRIM(LTRIM(INVOICE_NUM))=RTRIM(LTRIM(@_Column5)) AND RTRIM(LTRIM(TOTAL))=CAST(RTRIM(LTRIM(@_Column6)) AS MONEY)) END;
END
SET @index = @index+1;
END
DROP TABLE #temp --释放临时表
DELETE dbo.BatchExecSql; --完成后清空临时存放数据的表
END

时间: 2024-07-31 14:56:23

带有循环的存储过程的相关文章

基于ORACLE数据库的循环建表及循环创建存储过程的SQL语句实现

一.概述 在实际的软件开发项目中,我们经常会遇到需要创建多个相同类型的数据库表或存储过程的时候.例如,如果按照身份证号码的尾号来分表,那么就需要创建10个用户信息表,尾号相同的用户信息放在同一个表中. 对于类型相同的多个表,我们可以逐个建立,也可以采用循环的方法来建立.与之相对应的,可以用一个存储过程实现对所有表的操作,也可以循环建立存储过程,每个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表,每个表中包含员工工号(8位)和年龄字段,以工号的最后一位来分表.同时,我们建立存储

while 循环,存储过程

1.while 循环 declare @ss intset @ss=2while @ss<10begin set @[email protected]+1 print 'HELLO'+convert(char(10),@ss) if @ss=7 breakend declare @sss intset @sss=2while @sss<10begin set @[email protected]+1 if @sss=7 continue print 'HELLO'+convert(char(1

c# 调用带有参数的存储过程方法--oracle【转载】

1     由于交叉表的八个报表写在sql中了,每个报表对应sql语句有300行之多,不能定义视图,因为必须传递个参数,所以利用了存储过程实现. 首先,定义包,然后定义包体,在用.net调用生成数据集即可 .net调用oracle带参数的存储过程,返回数据集 Oracle这个复杂一些,步骤如下: 在pl/sql中首先写包的定义文件 CREATE OR REPLACE PACKAGE ZHBB AS    TYPE t_cursor IS REF CURSOR ;Procedure ZH11 (r

作用域与带有循环变量的默认参数相比较问题

这个问题是来自于美国作家鲁特兹(Mark Lutz)所作的一本<Learning Python,Fourth Edition>书里提及到的. 原文如下: 如果 lambda 或者 def 在函数中定义,嵌套在一个循环之中,并且嵌套的函数引用了一个上层作用域的变量,该变量被循环变量所改变,所有在这个循环变量中产生的函数将会有相同的值——在最后一次循环中完成时被引用变量的值. 我们来看下一个例子: >>> def makeActions(): ... acts = [] ...

带有分页的存储过程

-- ============================================= -- ============================================= CREATE PROCEDURE [control].[mp_GetSellerTerminalList_Temp] @Svalidtime DATETIME, /*验证开始时间*/ @Evalidtime DATETIME, /*验证结束时间*/ @CurrentPage int, /*当前页数*/

带有输出过程的存储过程

delimiter $ cerate procedure pro_out(out str varchar(20)) begin set str='hello word '; end $ DILIMITER ; 这里存在一个回话 变量的知识  下一次说 @name 假设这就是一个会画变量 call pro_out(@name) select @name 原文地址:https://www.cnblogs.com/qmk-716/p/9710600.html

oracle循环调用存储过程案例

如下: create or replace procedure testdate_2 is i number; out1 varchar2(100); out2 varchar2(100); CUSTOMERID NUMBER; cursor projidlist is select p.projid from proj_baseinfo p where p.projstage!='-999'; begin for i in projidlist LOOP begin select p.cust

基于ORACLE建表和循环回路来创建数据库存储过程SQL语句来实现

一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样的多个表,我们能够逐个建立,也能够採用循环的方法来建立.与之相相应的,能够用一个存储过程实现对全部表的操作.也能够循环建立存储过程,每一个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表.每一个表中包括员工工号(8位)和年龄字段,以工号的最后一位来分表.同一时候,我们建立存储过程实

存储过程和触发器

存储过程 5.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if  while) 5.2 存储过程特点 1)执行效率非常快!存储过程是在数据库的服务器端执行的!!! 2)移植性很差!不同数据库的存储过程是不能移植. 5.3 存储过程语法 -- 创建存储过程 DELIMITER $       -- 声明存储过程的结束符 CREATE PROCEDURE pro_test()           --存储过程名称(参数列表) BE