
USE [MiLaiShopTemp] GO /****** Object: StoredProcedure [dbo].[StoreElementTransfer] Script Date: 08/03/2016 09:10:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --导入店铺元素[LayerTB] TextElementTB ProductElementTB AdvertElementTB TextLinkElementTB SublineElementTB BlankElement SearchElement /*广告元素太啰嗦 先不导*/ ALTER PROCEDURE [dbo].[StoreElementTransfer] AS declare @www varchar(100)--商户域名 declare @m varchar(100)--页面生成码 declare @t varchar(100)--店铺元素类型 declare @num int--元素顺序 (已废弃该变量) declare @sort_id int=0 declare @htm varchar(2000)--元素内容 declare @sys varchar(2000)--元素属性? declare @create_time datetime=getdate() declare get_attr cursor for select www,m,t,num,htm,[sys] from [BingSNS_Client].[dbo].[BingSNS_DivID] BEGIN begin transaction open get_attr fetch next from get_attr into @www,@m,@t,@num,@htm,@sys print('@www:')print(@www) WHILE @@FETCH_STATUS = 0 begin --根据商户域名获取StoreId declare @store_id int=0 declare get_store_id cursor for select ID from [MiLaiShopTemp].[dbo].[StoreTB] where www=@www open get_store_id fetch get_store_id into @store_id --print('@store_id:')print(@store_id) close get_store_id DEALLOCATE get_store_id --根据店铺ID和页面生成码获取PageID declare @page_id int=0 declare get_page_id cursor for select id from [MiLaiShopTemp].[dbo].[PageTB] where StoreTBID=@store_id and GuidNumber=@m open get_page_id fetch get_page_id into @page_id close get_page_id DEALLOCATE get_page_id /*插入元素楼层表及元素表*/ declare @element_name varchar(100) declare @layer_id int=0 --------------------------------测试通过-------------------------------- if @t=1 --文本元素 begin --获取楼层最大序号 set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --1.插入楼层表 set @element_name='文本元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id --2.文本元素表 insert into [MiLaiShopTemp].[dbo].[TextElementTB] ([Text],LayerTBID,CreateTime) values (@htm,@layer_id,@create_time) end --------------------------测试通过------------------------------------------ if @t=2 --商品元素 begin print('商品元素') --2.商品元素表 declare @display_number int=0--显示数量 declare @product_id_list varchar(1000)=''--商品id列表 ,123,22,135, declare @product_type int=0--商品类别 declare @display_type int=0--显示类型 declare @is_display_price bit--是否显示价格 declare @is_display_title bit--是否显示标题 --解析变量@htm @sys /* 图片元素信息htm: 14123|10|商品名称|http://test002.ddomi.com/UploadFiles/UserData/test002/image/20160421/20160421145165756575.jpg $$$ 206|0|【测试】面膜|http://test002.ddomi.com/UploadFiles/UserData/test002/image/20160421/20160421145247264726.jpg $$$ 14126|10|商品名称|http://test002.ddomi.com/UploadFiles/UserData/test002/image/20160421/20160421145165756575.jpg 元素属性sys: 0|0|0 大图 1|0|0 小图 2|0|0 一大两小 2|1|0 显示名称 2|1|1 显示价格 我们先解析元素属性sys,在去解析图片元素信息 1.大图:每一张作为一个楼层 2.小图:每两张作为一个楼层 3.一大两小:一大作为一个楼层 两小最为一个楼层 */ declare @sys_1 varchar(100)=[MiLaiShopTemp].[dbo].[GetElementByIndex](@sys,'|',1)--获取显示类型 if ISNUMERIC(@sys_1)=1 set @display_type=convert(int,@sys_1) else begin set @display_type=-1 print('商品元素显示类型异常') end --是否显示价格 if [MiLaiShopTemp].[dbo].[GetElementByIndex](@sys,'|',3)=1 set @is_display_price=1 else set @is_display_price=0 --是否显示名称 if [MiLaiShopTemp].[dbo].[GetElementByIndex](@sys,'|',2)=1 set @is_display_title=1 else set @is_display_title=0 set @product_type=0 declare @product_id varchar(100) --图片元素中商品ID declare @element_index int=1--htm中元素的索引值 declare @element varchar(1000)--图片元素 print('@display_type') print(@display_type) --1.大图---------------------------测试通过----------------------------------- if @display_type=0 begin set @element=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index) while(ISNULL(@element,'')!='') begin set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --插入楼层表 set @element_name='商品元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id set @product_id_list=',' set @product_id=SUBSTRING(@element,1,CHARINDEX('|',@element)-1)--获取图片元素的属性产品Id print('@product_id') print(@product_id) set @product_id_list=@product_id_list+@product_id+',' set @display_number=1 set @element_index=@element_index+1 set @element=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index) insert into [MiLaiShopTemp].[dbo].[ProductElementTB] (LayerTBID,DisplayNumber,ProductIDList,DisplayType,IsDisplayPrice,IsDisplayTitle,CreateTime,ProductType) values (@layer_id,@display_number,@product_id_list,@display_type,@is_display_price,@is_display_title,@create_time,@product_type) end end --2.小图------------------------测试通过--------------------------------- if @display_type=1 begin set @element=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index) print('@element:'+@element) while(ISNULL(@element,'')!='') begin set @product_id=SUBSTRING(@element,1,CHARINDEX('|',@element)-1)--获取图片元素的属性产品Id if @element_index%2=1 begin set @product_id_list=',' set @product_id_list=@product_id_list+@product_id+',' end else--索引值为2的时候,存数据到表中 begin print('------------------1------------------------') set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --插入楼层表 set @element_name='商品元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id set @product_id_list=@product_id_list+@product_id+',' set @display_number=2 insert into [MiLaiShopTemp].[dbo].[ProductElementTB] (LayerTBID,DisplayNumber,ProductIDList,DisplayType,IsDisplayPrice,IsDisplayTitle,CreateTime,ProductType) values (@layer_id,@display_number,@product_id_list,@display_type,@is_display_price,@is_display_title,@create_time,@product_type) end set @element_index=@element_index+1--索引值+1 set @element=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index) --索引值为奇数时,且该索引值的元素不为空,且该索引值的元素的下一个元素为空时也要存数据到表中 if (@element_index%2=1 and (ISNULL(@element,'')!='')) begin print('------------------2------------------------') declare @element_next varchar(1000)--第奇数个元素的下一个元素 set @element_next=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index+1) --print('@element_next:'+@element_next) if (ISNULL(@element_next,'')='') begin set @product_id=SUBSTRING(@element,1,CHARINDEX('|',@element)-1)--获取图片元素的属性产品Id set @product_id_list=',' set @product_id_list=@product_id_list+@product_id+',' set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --插入楼层表 set @element_name='商品元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id set @display_number=1 insert into [MiLaiShopTemp].[dbo].[ProductElementTB] (LayerTBID,DisplayNumber,ProductIDList,DisplayType,IsDisplayPrice,IsDisplayTitle,CreateTime,ProductType) values (@layer_id,@display_number,@product_id_list,@display_type,@is_display_price,@is_display_title,@create_time,@product_type) end end end end ---------------------------测试通过-------------------------- --3.一大两小 if @display_type=2 begin set @element=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index) print('@element:'+@element) while(ISNULL(@element,'')!='') begin set @product_id=SUBSTRING(@element,1,CHARINDEX('|',@element)-1)--获取图片元素的属性产品Id if @element_index%3=1--第一张图作为大图 begin set @product_id_list=',' set @product_id_list=@product_id_list+@product_id+',' set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --插入楼层表 set @element_name='商品元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id set @display_number=1 insert into [MiLaiShopTemp].[dbo].[ProductElementTB] (LayerTBID,DisplayNumber,ProductIDList,DisplayType,IsDisplayPrice,IsDisplayTitle,CreateTime,ProductType) values (@layer_id,@display_number,@product_id_list,@display_type,@is_display_price,@is_display_title,@create_time,@product_type) end --------------------------------- if @element_index%3=2--第二张图作为小图 begin set @product_id_list=',' set @product_id_list=@product_id_list+@product_id+',' end -------------------------------------- if @element_index%3=0--第三张图作为小图 begin set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --插入楼层表 set @element_name='商品元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id set @product_id_list=@product_id_list+@product_id+',' set @display_number=2 insert into [MiLaiShopTemp].[dbo].[ProductElementTB] (LayerTBID,DisplayNumber,ProductIDList,DisplayType,IsDisplayPrice,IsDisplayTitle,CreateTime,ProductType) values (@layer_id,@display_number,@product_id_list,@display_type,@is_display_price,@is_display_title,@create_time,@product_type) end set @element_index=@element_index+1--索引值+1 set @element=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index) --特殊情况,小图只有一张时单独建个楼层 if (@element_index%3=2 and (ISNULL(@element,'')!='')) begin declare @element_next1 varchar(1000)--第奇数个元素的下一个元素 set @element_next1=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'$$$',@element_index+1) --print('@element_next:'+@element_next) if (ISNULL(@element_next1,'')='') begin set @product_id=SUBSTRING(@element,1,CHARINDEX('|',@element)-1)--获取图片元素的属性产品Id set @product_id_list=',' set @product_id_list=@product_id_list+@product_id+',' set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --插入楼层表 set @element_name='商品元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id set @display_number=1 insert into [MiLaiShopTemp].[dbo].[ProductElementTB] (LayerTBID,DisplayNumber,ProductIDList,DisplayType,IsDisplayPrice,IsDisplayTitle,CreateTime,ProductType) values (@layer_id,@display_number,@product_id_list,@display_type,@is_display_price,@is_display_title,@create_time,@product_type) end end end end end -------------------------------测试成功------------------------------- if @t=5 --文本链接元素( 文本链接 5 click|V1001_ABOUT lianjiemingchen|1 ) begin --获取楼层最大序号 set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --1.插入楼层表 set @element_name='文本链接元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID(理论上一定有值的) declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id --存入文本链接元素信息到表中 declare @link_name varchar(1000)--链接名称 declare @link_type int=0--链接类别 declare @link_type_str varchar(1000)--链接类别(记录老米来的文本链接元素链接类别) declare @link varchar(1000) --链接内容 set @link_name=[MiLaiShopTemp].[dbo].[GetElementByIndex](@sys,'|',1) set @link=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'|',2) set @link_type_str= [MiLaiShopTemp].[dbo].[GetElementByIndex](@sys,'|',2) if @link_type_str=2 set @link_type=1 if @link_type_str=3 set @link_type=3 if @link_type_str=4 set @link_type=4 if @link_type_str=5 set @link_type=5 insert into [MiLaiShopTemp].[dbo].[TextLinkElementTB] (LayerTBID,LinkName,LinkType,Link,CreateTime) values (@layer_id,@link_name,@link_type,@link,@create_time) end ------------------------测试通过--------------------------------- if @t=8 --辅助线元素 begin --获取楼层最大序号 set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --1.插入楼层表 set @element_name='辅助线元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID(理论上一定有值的) declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id --存入下划线元素信息到表中 declare @color varchar(100) --颜色 declare @subline_type int=2--默认直线 declare @margin_top_and_bottom int=10--上下间距 declare @subline_height int=1 --辅助线高度 set @color=@htm insert into [MiLaiShopTemp].[dbo].[SublineElementTB] (LayerTBID,Color,CreateTime,SublineType,MarginTopAndBottom,SublineHeight) values (@layer_id,@color,@create_time,@subline_type,@margin_top_and_bottom,@subline_height) end --------------------------------------------------------------- if @t=9 --辅助空白元素 begin --获取楼层最大序号 set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --1.插入楼层表 set @element_name='辅助线元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID(理论上一定有值的) declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id --存入辅助空白元素信息到表中 declare @color_blank varchar(100) --颜色 declare @height varchar(100)--高度 set @color_blank=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'|',2) set @height=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'|',1) if ISNUMERIC(@height)=1 begin insert into [MiLaiShopTemp].[dbo].[BlankElementTB] (LayerTBID,Color,Height,CreateTime) values (@layer_id,@color_blank,@height,@create_time) end end -----------------------测试通过---------------------------- if @t=7--搜索框元素 begin --获取楼层最大序号 set @sort_id=[MiLaiShopTemp].[dbo].[GetMaxSortIdFromLayerTBByPageId](@page_id) --获取装修页楼层的最大排序号 if (ISNULL(@sort_id,0)=0) set @sort_id=1 else set @sort_id=@sort_id+1 --1.插入楼层表 set @element_name='搜索框元素' insert into [MiLaiShopTemp].[dbo].[LayerTB] (PageTBID,SortID,CreateTime,ElementName) values (@page_id,@sort_id,@create_time,@element_name) --获取刚插入的楼层表的ID(理论上一定有值的) declare get_layer_id cursor for SELECT TOP 1 [ID] FROM [MiLaiShopTemp].[dbo].[LayerTB] order by ID desc open get_layer_id fetch get_layer_id into @layer_id close get_layer_id DEALLOCATE get_layer_id --存入搜索框元素信息到表中 declare @border_color varchar(100) --边框颜色 set @border_color=[MiLaiShopTemp].[dbo].[GetElementByIndex](@htm,'|',1) insert into [MiLaiShopTemp].[dbo].[SearchElementTB] (LayerTBID,BorderColor,CreateTime) values (@layer_id,@border_color,@create_time) end fetch next from get_attr into @www,@m,@t,@num,@htm,@sys end close get_attr commit transaction END