使用存储过程---将关联企业信息表中,客户的主版本信息拷贝到副版本中

DROP PROCEDURE IF EXISTS `into_relation`;
DELETE FROM crm_relation WHERE client_ID IN (SELECT c.`client_ID` FROM crm_client c WHERE c.`isMainVersion` = 0);

DELIMITER $

CREATE PROCEDURE `into_relation`() COMMENT ‘插入关联企业信息‘
BEGIN
-- 声明变量
DECLARE v_client_Id INT;
DECLARE v_count INT;
DECLARE s1 INT;

/** 声明游标,并将查询结果存到游标中 **/
DECLARE client_Id_cursor CURSOR FOR

SELECT client_Id FROM crm_client c WHERE c.`clientGUID` IN (SELECT DISTINCT c.`clientGUID` FROM crm_relation b LEFT JOIN crm_client c ON c.`client_ID`=b.`client_ID`) AND c.`isMainVersion`=0 ORDER BY client_ID;

SELECT COUNT(client_Id) INTO v_count FROM crm_client c WHERE c.`clientGUID` IN (SELECT DISTINCT c.`clientGUID` FROM crm_relation b LEFT JOIN crm_client c ON c.`client_ID`=b.`client_ID`) AND c.`isMainVersion`=0 ORDER BY client_ID;

SET s1 = 1;

-- 开始事务
START TRANSACTION;
-- 打开游标
OPEN client_Id_cursor;
-- 循环游标
WHILE (s1 < v_count+1) DO
-- 遍历游标
FETCH client_Id_cursor INTO v_client_Id;
-- 嵌套使用游标
BEGIN

DECLARE v_relationClientID INT(11);
DECLARE v_relationDesc VARCHAR(200);
DECLARE v_createUserName VARCHAR(20);
DECLARE v_createDateTime DATETIME;
DECLARE v_updateUserName VARCHAR(20);
DECLARE v_updateDateTime DATETIME;

DECLARE v_count2 INT;
DECLARE s2 INT;

DECLARE relation_cursor CURSOR FOR
SELECT b.`relationClientID`,b.`relationDesc`,b.`createUserName`,b.`createDateTime`,b.`updateUserName`,b.`updateDateTime` FROM crm_relation b

WHERE b.`client_ID`=(SELECT c.`client_ID` FROM crm_client c WHERE c.`clientGUID` = (SELECT c2.`clientGUID` FROM crm_client c2 WHERE c2.`client_ID` = v_client_Id) AND c.`isMainVersion`=1) ORDER BY relation_id;

SET v_count2 = 0;
SELECT COUNT(b.`relation_ID`) INTO v_count2 FROM crm_relation b
WHERE b.`client_ID`=(SELECT c.`client_ID` FROM crm_client c WHERE c.`clientGUID` = (SELECT c2.`clientGUID` FROM crm_client c2 WHERE c2.`client_ID` = v_client_Id) AND c.`isMainVersion`=1) ORDER BY relation_id;
SET s2 = 1;
OPEN relation_cursor;
WHILE (s2 < v_count2+1) DO
FETCH relation_cursor INTO v_relationClientID,v_relationDesc,v_createUserName,v_createDateTime,v_updateUserName,v_updateDateTime;
INSERT INTO crm_relation (`client_ID`,`relationClientID`,`relationDesc`,`createUserName`,`createDateTime`,`updateUserName`,`updateDateTime`)
VALUES (v_client_Id,v_relationClientID,v_relationDesc,v_createUserName,v_createDateTime,v_updateUserName,v_updateDateTime);
SET s2 = s2 + 1;
END WHILE;
CLOSE relation_cursor;
END;
SET s1 = s1 + 1;
END WHILE;
CLOSE client_Id_cursor;
COMMIT; -- 事务提交
END$
DELIMITER ;

CALL into_relation();

/**
创建存储过程: create procedure ‘into_relation()‘ comment ‘插入关联企业信息‘
begin :
--声明要使用到的变量---
declare v_client_id int;
declare v_count int;
declare s1 int;
--声明游标,并将查询结果存到游标中(client_id)--
declare client_id_cursor cursor for (数据源)
select cleint_id from crm_client c where c.client_id in (select distinct
c.clientGUID from crm_relation b left join crm_client c on c.client_id = b.client_id)
and c.isMainVersion = 0 order by client_id
--将查询出来的client_id 存放在游标中--
select count(client_id) into v_vount from ------计算游标长度,即存放数据的个数;
set s1 = 1;
--开始事务---
start transaction;
--打开游标---
open client_id_cursor;
--使用while循环控制 循环游标--
while (s1<v_count+1) DO
--遍历游标--
fetch client_id_cursor into v_client_id;
--嵌套使用游标--
--又一次begin--
declare v_relationClientID INT (11);
declare v_relationDesc varchar(200);
declare v_count2 int;
declare s2 int;

declare relation_cursor cursor for(数据源)
----查询数据--
select b.relationClientID ,b.relationDesc,b.createUserName
from crm_relation b
where b.client_id = (select c.client_id from crm_client c where c.clientGUID =
(select c2.clientGUID FROM crm_client c2 where c2.client_id = v_client_id(此id为每一循环时从游标1中去除的id))
and c.isMainVersion = 1 ) order by relation_id;
set v_count2 = 0;
set count(b.relation_id) into v_count2 from crm_relation b
where b.client_id=........
set s2 = 1;
--打开第二个游标
open relation_cursor;

*/

时间: 2024-09-29 03:40:27

使用存储过程---将关联企业信息表中,客户的主版本信息拷贝到副版本中的相关文章

C# 使用 GetOleDbSchemaTable 检索架构信息(表、列、主键等)

本文演示如何用 ADO.NET 中 OleDbConnection 对象的 GetOleDbSchemaTable 方法检索数据库架构信息.数据源中的架构信息包括数据库或可通过数据库中的数据源.表和视图得到的目录以及所存在的约束等.表中的架构信息包括主键.列和自动编号字段. 注意,在使用 SqlClient.SqlConnection 对象时没有与 GetOleDbSchemaTable 等价的方法.SQL Server .NET 数据提供程序通过存储过程和信息性视图展示后端架构信息.有关可通过

例题:学习数据库查询。学生信息表的创建,主外键关系,以及45道题的查询实例。主要知识点在讲页45页,和讲页65页

create database shujuku use shujuku use cangku go --注意事项:外键对本关系不一定是键 --2:创建外键时,链接表的主关键字已经确立 --3:当创建外部键后,外部键的取值必须来源于主键值 --4:要想删除主键表时,必须先删除外键表信息 create table student--学生表 ( sno varchar(50) not null primary key ,--学生主键 sname varchar(50)not null, ssex va

如何增加Asp.Net Core生成的模板网站中用户信息表中的列(AspNetUsers)

环境: 1.VS2015 Community 14.0.25431.01 Update 3; 2.其他环境(具体哪一个影响不太清楚,都列在这儿) 使用的系统模板 利用系统提供的模板,并选择个人身份验证.如图: 问题: 模板提供的身份认证数据库中的AspNetUsers表,需要根据需要增加列.以下图为例,绿色框中的列都是模板默认的,我要增加一列(以Test为例). 解决过程: 刚刚接触MVC.EF的概念,不知道如何操作.查阅了大量资料后发现,网上大部分类似内容都是基于mvc3的,最后还是在stac

Python开发【第xxx篇】函数练习题-----员工信息表

文件存储格式如下: id,name,age,phone,job 1,Alex,22,13651054608,IT 2,Egon,23,13304320533,Tearcher 3,nezha,25,1333235322,IT 现在需要对这个员工信息文件进行增删改查. 基础必做: a.可以进行查询,支持三种语法: select 列名1,列名2,- where 列名条件 支持:大于小于等于,还要支持模糊查找. 示例: select name,age where age>22   #> < s

java 数据结构 图中使用的一些常用算法 图的存储结构 邻接矩阵:图的邻接矩阵存储方式是用两个数组来标示图。一个一位数组存储图顶点的信息,一个二维数组(称为邻接矩阵)存储图中边或者弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 实例如下,左图是一个无向图。右图是邻接矩阵表示:

以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合. 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对(Vi,Vj)标示. 对于下图无向图G1来说,G1=(V1, {E1}),其中顶点集合V1={A,B,C,D}:边集合E1={(A,B),(B,C),(C,D),(D,A),(A,C)}: 有向图:若

delphi SysErrorMessage 函数和系统错误信息表 good

在看 API 文档时, 我们经常见到 GetLastError; 它可以返回操作后系统给的提示. 但 GetLastError 返回的只是一个信息代码, 如何返回对应的具体信息呢? FormatMessage 可以, 但这个函数太复杂了; 可以用 SysErrorMessage 代替它. 举例: [Delphi] view plaincopyprint? <pre><pre class="delphi" name="code">var err

python-作业:员工信息表

程序可实现以下功能:1.查询,输入select name,age from staff_table where age > 22,查询到符合要求的信息: 输入select * from staff_table where dept = "IT",查询到符合要求的信息: 输入select * from staff_table where enroll_date like "2013",查询到符合要求的信息.2.创建,输入insert Mickle,22,1365

python练习_module02-1-员工信息表

python 操作 员工信息表 要求: 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22select * from staff_table where dept = "IT"select * from staff_table where enroll_date like "2013" 查到的信息,打印后,最后面还要显示查到的条数 可创建新员工纪录,以phone做唯一键,sta

完整SQL分页存储过程(支持多表联接)

http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************************************* * 作 用:数据分页(完整SQL分页存储过程(支持多表联接))* 作 者:齐李平* 创建日期:2009-03-23* 使用说明: 1.单表调用方法:EXEC proc_DataPagination @tblName = 'ipa',@fldName