zoukankan      html  css  js  c++  java
  • 第一次的任务利用游标执行SQL整合数据库

    今天天气不错,和娟儿分手了,第一次感觉舒服点,真的。
    很长时间我都调节不过来。

    经理昨天和我们说了这个项目,我本来想做一个工具的,貌似没有做成功,现在工具还是半吊子。上午经理要求早点做好,我就做被,有什么好说的呢 。。
     
    给了我一个超市的需求,上面写的和真的似的。貌似肯定是真的。张明说800大洋呢。呵呵

    需求:
    1、要求每个门店现有的分类完全一样,类别名称也一样。
    2、9个库并未一个库,以商品条码未准,条码相同的,则保留进价最低的商品信息
    3、商品档案的主供应商信息不变活着为空,待以后调整。
    4、自编码重新生成。
    5、并库后的商品售价统一未一个,每个门店的价格签需全部更换。
    6、要连锁统一管理管理,无条码商品也不许由总部统一编号,制定唯一的自编码,没有其他途径。

    经理首先把9个库给了我,是excel的。
    我想了半天感觉做工具的话可能有点慢,等把工具做好公司早就要交差了。就两天时间啊。算了,自己整理吧。
    首先我将9个excel的表全部导入到sql数据库里面去。
    那么就有9个表,。
    然后重新建立一个完全相同的表结构,的表作为她以后的存放之地。
    select * into t_bd_item_info_13
    from dbo.t_bd_item_info1 where 1=0 
    第一次这么写,还是部门经理告诉我的呢 。我还真不知道。
    既然知道了那就好了,我将所有的表中的是13位的条形码全部弄出来
    然后就出现了9个全是13位条形码的表
    select * from dbo.t_bd_item_info1
    where item_no like'_____________'
    ---上面的'____'是下划线
    我用这个语句只是想尝试的看下里面的内容是否可以读出来,然后我就将这个变成以个游标:
    declare youbiao_qu13 cursor for
    select * from dbo.t_bd_item_info9
    where item_no like'_____________'
    好了我相信很多人都知道怎么去用这个游标,他就相当于一个数据表一样,但是里面有个fetch的方法,(不知道叫不叫方法吧,程序写多了,姑且这么叫吧)
    下面我们就要自己去吧这个游标里面的内容全部给读取出来了,怎么读呢,然后放到其他表里面
    open youbiao_qu13    
    declare
    @item_no nvarchar(510),
    @item_subno nvarchar(510),
    @item_name nvarchar(510),
    @item_subname nvarchar(510),
    @item_clsno nvarchar(510),
    @item_brand nvarchar(510),
    @item_brandname nvarchar(510),
    @unit_no nvarchar(510),
    @item_size nvarchar(510),
    @product_area nvarchar(510),
    @price float,
    @base_price float,
    @sale_price float,
    @combine_sta nvarchar(510),
    @status nvarchar(510),
    @display_flag nvarchar(510),
    @other1 nvarchar(510),
    @other2 nvarchar(510),
    @other3 nvarchar(510),
    @num1 float,
    @num2 float,
    @num3 float,
    @po_cycle float,
    @so_cycle float,
    @automin_flag nvarchar(510),
    @en_dis nvarchar(510),
    @direct nvarchar(510),
    @change_price nvarchar(510),
    @purchase_tax float,
    @sale_tax float,
    @purchase_spec float,
    @shipment_spec float,
    @item_supcust nvarchar(510),
    @main_supcust nvarchar(510),
    @lose_rate float,
    @item_sup_flag nvarchar(510),
    @item_stock nvarchar(510),
    @item_counter nvarchar(510),
    @sup_ly_rate float,
    @build_date smalldatetime,
    @modify_date smalldatetime,
    @stop_date smalldatetime,
    @return_rate float,
    @abc nvarchar(510),
    @branch_price nvarchar(510),
    @item_rem nvarchar(510),
    @vip_price float,
    @sale_min_price float,
    @branch_no nvarchar(510),
    @cost_compute nvarchar(510),
    @com_flag nvarchar(510),
    @base_price1 float,
    @base_price2 float,
    @base_price3 float,
    @vip_acc_flag nvarchar(510),
    @vip_acc_num float,
    @dpfm_type nvarchar(510),
    @trans_price float,
    @vip_price1 float,
    @vip_price2 float

    fetch next from youbiao_qu13
    while @@fetch_status=0
    begin
        
    fetch next from youbiao_qu13
        
    into @item_no,@item_subno,@item_name,
    @item_subname,@item_clsno,@item_brand,@item_brandname,
    @unit_no,@item_size,@product_area,@price,@base_price,
    @sale_price,@combine_sta,@status,@display_flag,@other1,@other2,
    @other3,@num1,@num2,@num3,@po_cycle,@so_cycle,@automin_flag,@en_dis,
    @direct,@change_price,@purchase_tax,@sale_tax,@purchase_spec,@shipment_spec,
    @item_supcust,@main_supcust,@lose_rate,@item_sup_flag,@item_stock,@item_counter,
    @sup_ly_rate,@build_date,@modify_date,@stop_date,@return_rate,@abc,@branch_price,
    @item_rem,@vip_price,@sale_min_price,@branch_no,@cost_compute,
    @com_flag,@base_price1,@base_price2,@base_price3,@vip_acc_flag,
    @vip_acc_num,@dpfm_type,@trans_price,@vip_price1,@vip_price2
        
    insert into dbo.t_bd_item_info_13 values (@item_no,@item_subno,@item_name,
    @item_subname,@item_clsno,@item_brand,@item_brandname,
    @unit_no,@item_size,@product_area,@price,@base_price,
    @sale_price,@combine_sta,@status,@display_flag,@other1,@other2,
    @other3,@num1,@num2,@num3,@po_cycle,@so_cycle,@automin_flag,@en_dis,
    @direct,@change_price,@purchase_tax,@sale_tax,@purchase_spec,@shipment_spec,
    @item_supcust,@main_supcust,@lose_rate,@item_sup_flag,@item_stock,@item_counter,
    @sup_ly_rate,@build_date,@modify_date,@stop_date,@return_rate,@abc,@branch_price,
    @item_rem,@vip_price,@sale_min_price,@branch_no,@cost_compute,
    @com_flag,@base_price1,@base_price2,@base_price3,@vip_acc_flag,
    @vip_acc_num,@dpfm_type,@trans_price,@vip_price1,@vip_price2)
    end

    close open youbiao_qu13

    呵呵。貌似当时是这么干的,通过更改表名,我就实现了数据的转移,但是似乎就是字段之类的有点问题,这么多字段,其实一个都不是我写的,是我用代码自动生成的,感觉自己手工写的话肯定有不少错误,但是最后还是有错误,就是不怎么行啊 ,在导入第三个库的时候,出现了问题,那么我就想其他的办法了。
    似乎刚才经理交给我了一点东西,有什么用呢。我这么想着,肯定可以将数据全部导出到令以个表的,
    它上门的where语句是1=0那么那条命令还是会全部的扫描整个表的,那好就这么写了于是就出现了相对上门更加超级简单的SQL语句,我的心啊 是贼啦的舒服。
    select * into dbo.t_bd_item_info1
    from dbo.t_bd_item_info
    where item_no like'_____________'
    一个个数据表在变更参数的时候都一个一个的出来了。真好。
    好了 9个表出来了,全是13位的,然后就是吧那9个表合起来,好了数据库直接导入吧,在学校学的简单的操作又操作了一遍

    9个变成一个了 下面我就要执行第二个阶段了,就是将这个表里面的相同编码的数据去价格最低的。好该怎么写还得怎么写憋屈了半天写了个贼啦长的SQL语句

    先是一个游标:查找出什么自己应该可以看懂的饿

    DECLARE youbiao_qudanjia CURSOR FOR
    SELECT item_no,min(price) FROM dbo.t_bd_item_info_13_zongbiao
    GROUP BY item_no order by item_no

    好下面我们好好利用这个游标,怎么做呢 。。嘿嘿先把SQL语句给标上,让大家看看,能不能很简单的理解我写的SQL语句呢。我的思想其实很简单,就是照它要求的逻辑走。
    open youbiao_qudanjia    
    DECLARE 
    @item_n nvarchar(510),
    @pric float,

    @item_no nvarchar(510),
    @item_subno nvarchar(510),
    @item_name nvarchar(510),
    @item_subname nvarchar(510),
    @item_clsno nvarchar(510),
    @item_brand nvarchar(510),
    @item_brandname nvarchar(510),
    @unit_no nvarchar(510),
    @item_size nvarchar(510),
    @product_area nvarchar(510),
    @price float,
    @base_price float,
    @sale_price float,
    @combine_sta nvarchar(510),
    @status nvarchar(510),
    @display_flag nvarchar(510),
    @other1 nvarchar(510),
    @other2 nvarchar(510),
    @other3 nvarchar(510),
    @num1 float,
    @num2 float,
    @num3 float,
    @po_cycle float,
    @so_cycle float,
    @automin_flag nvarchar(510),
    @en_dis nvarchar(510),
    @direct nvarchar(510),
    @change_price nvarchar(510),
    @purchase_tax float,
    @sale_tax float,
    @purchase_spec float,
    @shipment_spec float,
    @item_supcust nvarchar(510),
    @main_supcust nvarchar(510),
    @lose_rate float,
    @item_sup_flag nvarchar(510),
    @item_stock nvarchar(510),
    @item_counter nvarchar(510),
    @sup_ly_rate float,
    @build_date smalldatetime,
    @modify_date smalldatetime,
    @stop_date smalldatetime,
    @return_rate float,
    @abc nvarchar(510),
    @branch_price nvarchar(510),
    @item_rem nvarchar(510),
    @vip_price float,
    @sale_min_price float,
    @branch_no nvarchar(510),
    @cost_compute nvarchar(510),
    @com_flag nvarchar(510),
    @base_price1 float,
    @base_price2 float,
    @base_price3 float,
    @vip_acc_flag nvarchar(510),
    @vip_acc_num float,
    @dpfm_type nvarchar(510),
    @trans_price float,
    @vip_price1 float,
    @vip_price2 float


        
    FETCH NEXT FROM  youbiao_qudanjia
        
    INTO @item_n,@pric  
    SELECT  top 1 @item_no=item_no,@item_subno=item_subno,@item_name=item_name,
    @item_subname=item_subname,@item_clsno=item_clsno,@item_brand=item_brand,@item_brandname=item_brandname,
    @unit_no=unit_no,@item_size=item_size,@product_area=product_area,@price=price,@base_price=base_price,
    @sale_price=sale_price,@combine_sta=combine_sta,@status=status,@display_flag=display_flag,@other1=other1,@other2=other2,
    @other3=other3,@num1=num1,@num2=num2,@num3=num3,@po_cycle=po_cycle,@so_cycle=so_cycle,@automin_flag=automin_flag,@en_dis=en_dis,
    @direct=direct,@change_price=change_price,@purchase_tax=purchase_tax,@sale_tax=sale_tax,@purchase_spec=purchase_spec,@shipment_spec=shipment_spec,
    @item_supcust=item_supcust,@main_supcust=main_supcust,@lose_rate=lose_rate,@item_sup_flag=item_sup_flag,@item_stock=item_stock,@item_counter=item_counter,
    @sup_ly_rate=sup_ly_rate,@build_date=build_date,@modify_date=modify_date,@stop_date=stop_date,@return_rate=return_rate,@abc=abc,@branch_price=branch_price,
    @item_rem=item_rem,@vip_price=vip_price,@sale_min_price=sale_min_price,@branch_no=branch_no,@cost_compute=cost_compute,
    @com_flag=com_flag,@base_price1=base_price1,@base_price2=base_price2,@base_price3=base_price3,@vip_acc_flag=vip_acc_flag,
    @vip_acc_num=vip_acc_num,@dpfm_type=dpfm_type,@trans_price=trans_price,@vip_price1=vip_price1,@vip_price2=vip_price2 
    FROM  dbo.t_bd_item_info_13_zongbiao WHERE item_no=@item_n AND price=@pric

    INsert into dbo.t_bd_item_info_13_zongbiao_2
    VALUES(@item_no,@item_subno,@item_name,
    @item_subname,@item_clsno,@item_brand,@item_brandname,
    @unit_no,@item_size,@product_area,@price,@base_price,
    @sale_price,@combine_sta,@status,@display_flag,@other1,@other2,
    @other3,@num1,@num2,@num3,@po_cycle,@so_cycle,@automin_flag,@en_dis,
    @direct,@change_price,@purchase_tax,@sale_tax,@purchase_spec,@shipment_spec,
    @item_supcust,@main_supcust,@lose_rate,@item_sup_flag,@item_stock,@item_counter,
    @sup_ly_rate,@build_date,@modify_date,@stop_date,@return_rate,@abc,@branch_price,
    @item_rem,@vip_price,@sale_min_price,@branch_no,@cost_compute,
    @com_flag,@base_price1,@base_price2,@base_price3,@vip_acc_flag,
    @vip_acc_num,@dpfm_type,@trans_price,@vip_price1,@vip_price2)

    CLOSE youbiao_qudanjia


    数据库跑了接近一个小时,靠在旁边抽烟。结束后基本上的主要内容算完成了,还有就是编码了。根据什么编码我还要照人商量夏,明天或许今天晚上可以将它搞定 的饿。。。嘿嘿 看了下数据库真TMD帅哈哈。

  • 相关阅读:
    .NET 4.5 is an in-place replacement for .NET 4.0
    python Argparse模块的使用
    linux的fork(), vfork()区别
    Linux 的 strace 命令
    NTFS系统的ADS交换数据流
    Git和.gitignore
    GIT常用命令
    OSChina码云试用
    tcpdump用法
    linux网卡混杂模式
  • 原文地址:https://www.cnblogs.com/itgmhujia/p/1090415.html
Copyright © 2011-2022 走看看