中间表模式接口,基础数据同步



/******1.创建本地视图,否则每一次访问都要写好长的SQL语句******/

create view TJ_HIS_PRODUCT AS (select * from openquery(TJ_HIS_TEST,

‘SELECT * FROM HR.V_BJP_INTERFACE_MEDICINEINFO‘))


/******2.存储过程细节******/

USE [库]

GO

/******  Object:  StoredProcedure

[dbo].[SysUpdateProductnew]    Script  Date: 12/02/2016 10:00:20 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[SysUpdateProductnew]

AS

/*

第一步插入新数据

*/

DECLARE @DRUG_CODE varchar(20),@goodsid varchar(20),@maker_id varchar(50),@spec varchar(50),@DRUG_NAME varchar(150),@unit varchar(10),

@styleid int,@pieceratio VARCHAR(20),@makername varchar(150),@Mnemonic varchar(30),@rtprice numeric(18, 4),@wsprice numeric(18, 4),@TOXI_PROPERTY VARCHAR(20),@min_spec varchar(20),@v_sub_package int,@mini_unit varchar(30),@ExtFileds5 varchar(5)

declare Sys_product_cur scroll cursor for

select distinct DRUG_CODE,

DRUG_NAME,

INPUT_CODE,

DRUG_SPEC,

DRUG_UNITS,

TRADE_PRICE,

RETAIL_PRICE,

FIRM_ID,

FIRM_NAME,

TOXI_PROPERTY,

MIN_SPEC,

AMOUNT_PER_PACKAGE,

Min_units,

Drug_INDICATOR

FROM TJ_HIS_PRODUCT THP

WHERE NOT EXISTS(SELECT 1

FROM  PRODUCT

WHERE PRODUCT.drug_id = THP.DRUG_CODE

AND PRODUCT.SPEC = THP.DRUG_SPEC

AND PRODUCT.MAKERID = THP.FIRM_ID

AND PRODUCT.UNIT = THP.DRUG_UNITS)

open Sys_product_cur

fetch first from Sys_product_cur  into @DRUG_CODE,@DRUG_NAME,@Mnemonic,@spec,@unit,

@wsprice ,@rtprice ,@maker_id,@makername ,@TOXI_PROPERTY ,@min_spec,@v_sub_package,@mini_unit,@ExtFileds5

while @@fetch_status=0

BEGIN

--10位商品编码

select @goodsid=right(‘0000000000‘+cast(isnull(max(goodsid),0)+1 as varchar(10)),10) from product

INSERT into product(warehouseid,goodsid,Description,spec,unit,styleid,ControlId,

PieceRatio,MidRatio,AbcCode,MakerId,MakerName,Mnemonic,CaseScale,

RtPrice,WsPrice,CreateDate,CreateMan,ModifiedDate,drug_id,status,orgid,ExtFields1,ExtFileds2,ExtFileds3,MiniUnit,ExtFileds5)

values   (‘Y30‘,@goodsid,@DRUG_NAME,@spec,@unit,@styleid,0,

@pieceratio,0,‘C‘,@maker_id,@makername,@Mnemonic,0,

@rtprice,@wsprice,getdate(),‘SA‘,getdate(),@DRUG_CODE,0,‘102‘,@TOXI_PROPERTY,@min_spec,@v_sub_package,@mini_unit,@ExtFileds5)

fetch next from  Sys_product_cur  into @DRUG_CODE,@DRUG_NAME,@Mnemonic,@spec,@unit,

@wsprice ,@rtprice ,@maker_id,@makername ,@TOXI_PROPERTY ,@min_spec,@v_sub_package,@mini_unit,@ExtFileds5

END

close Sys_product_cur

deallocate Sys_product_cur

--第二步,修改已存商品的信息

BEGIN

update product

SET PRODUCT.PieceRatio = ‘1‘,

PRODUCT.RTPRICE = TJ_HIS_PRODUCT.RETAIL_PRICE,

PRODUCT.WsPrice = TJ_HIS_PRODUCT.TRADE_PRICE,

PRODUCT.BuyPrice = TJ_HIS_PRODUCT.TRADE_PRICE,

PRODUCT.MiniUnit = TJ_HIS_PRODUCT.MIN_UNITS,--最小单位

PRODUCT.ExtFileds3 = TJ_HIS_PRODUCT.AMOUNT_PER_PACKAGE,

PRODUCT.Description = TJ_HIS_PRODUCT.DRUG_NAME,

PRODUCT.ExtFileds5 = TJ_HIS_PRODUCT.DRUG_INDICATOR,--中,西药,中成药标识

product.Mnemonic = TJ_HIS_PRODUCT.INPUT_CODE

from TJ_HIS_PRODUCT,product

where TJ_HIS_PRODUCT.DRUG_CODE = product.drug_id

AND TJ_HIS_PRODUCT.DRUG_SPEC = product.Spec

AND TJ_HIS_PRODUCT.DRUG_UNITS = product.Unit

AND TJ_HIS_PRODUCT.FIRM_ID = product.MakerId

END


--3.过滤停价药品

BEGIN

UPDATE Product SET status = ‘9‘ FROM Product WHERE status<>‘9‘ AND NOT EXISTS(

SELECT * FROM TJ_HIS_PRODUCT  V WHERE Product.drug_id = V.DRUG_CODE AND PRODUCT.Spec = V.DRUG_SPEC AND PRODUCT.Unit = V.DRUG_UNITS AND PRODUCT.MakerId = V.FIRM_ID)

END

欢迎技术大拿留下建议!不喜误喷,谢谢!
时间: 2024-11-07 11:16:34

中间表模式接口,基础数据同步的相关文章

基于datax的数据同步平台

一.需求 由于公司各个部门对业务数据的需求,比如进行数据分析.报表展示等等,且公司没有相应的系统.数据仓库满足这些需求,最原始的办法就是把数据提取出来生成excel表发给各个部门,这个功能已经由脚本转成了平台,交给了DBA使用,而有些数据分析部门,则需要运维把生产库的数据同步到他们自己的库,并且需要对数据进行脱敏,比如客户的身份证号.手机号等等,且数据来源分散在不同的机器,不同的数据库实例里,这样就无法使用MySQL的多源复制,只能用写脚本通过SQL语句实现,随着业务的发展,导致堆积到运维部门的

C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 能支撑10万以上客户端的数据同步下载问题

庞大的业务系统,特别是需要有离线作业操作支持的核心业务系统,需要有强大的基础数据同步功能,基础数据有在增加.有在变动.有在失效,同时有大量的客户端全天侯的在连接服务器.不间断的在处理核心数据. 经过2年的不断完善改进.又有保证性能.又有能保证性能.又支持自动升级的接近完美的客户端诞生了.在这个基础上开发任何业务模块都会方便很多,客户端支持手动同步基础技术.登录系统时后台自动同步数据等功能. 其实很多时候,难点不在于技术有多少深奥.在于稳定可靠.放心用,经得起大量客户端的参考考验. 把每一个点点滴

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

SQL Server 使用 Merge 关键字进行表数据同步

简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的. 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做

实战基础技能(08)--------MVVM模式中WPF数据的完全绑定

一:截图,描述:将后台代码的姓名.年龄绑定到文本框,单击”增加年龄“--年龄自+1,单击”显示年龄“--弹出年龄的显示对话框,实现了从文本框修改年龄和后台更改年龄并显示到文本框 运行结果和解决方案管理截图如下: 二:person类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace 完全数据绑定 {

oracle数据表数据同步公用方法

自己写了个数据同步的方法,两个数据库之间的数据同步,自己可以通过调用存储过程,添加作业实现定时同步数据. CREATE OR REPLACE PROCEDURE Data_sync_Common(tableName in varchar2) is v_sql VARCHAR2(20000); --????SQL pk_col_name VARCHAR2(800); --主键SQL insert_col_name_A VARCHAR2(20000); --A表字段 insert_col_name_

【转】mysql 触发器实现两个表的数据同步

mysql通过触发器实现两个表的同步 目前,在本地测试成功. 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新. 代码: DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `a`.`触发器名` BEFORE UPDATE ON `a`.`table1` FOR EACH ROW BEGIN I

sybase代理表 跨服务器数据同步

sybase ASE 代理表  跨服务器数据同步 之前双做了sybase服务器数据同步,使用的代理表.近期更换server1,一开始安装sybase时本地服务器名不同,server1的数据直接dump,完成后可以读取数据,但在执行代理表数据插入本地表中时报错.查询后 select @@servername 本地名为db3 查询原本地服务器名为charge 删除原名 sp_dropserver db3 设置新名,即原server1名 sp_addserver charge,local 重启syba

PLSQL Developer来实现不同数据库的表结构以及表数据同步

PLSQL Developer菜单栏中 Tools选项下有Compare User Objects和Compare Table Data功能. 一.Tools --> compare user objects 该功能用于比较不同用户所拥有的对象(包括table.sequence.function.procedure.view等),并生成同步差异的sql脚本,用户通过执行该脚本,可保持两个用户的对象结构的同步,当然你也可以选择一个对象或者多个对象来进行比较. 操作步骤: 1. 选择样本库的对比对象