USE [XinZhi]
GO
/****** Object: StoredProcedure [dbo].[商品促销策略] Script Date: 2018/10/25 17:06:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[商品促销策略] (
@store_id NVARCHAR(50), --门店/商户编号
@client_type NVARCHAR(50),--终端类型
@product_id NVARCHAR(50),--商品编号
@sku_id NVARCHAR(50))--SKU编号
as
BEGIN
declare @server_id nvarchar(50)--服务id
declare @qty int--查询是否存在
declare @pr_sn varchar(50)--促销活动单号
declare @pr_type varchar(50)--促销类型
declare @pr_type_value varchar(50)--促销类型值
declare @status int-- 状态
DECLARE @display_ids nvarchar(50);--陈列分类编号
DECLARE @display_id nvarchar(50);--陈列分类编号
select @server_id=server_id from tb_pos_client where store_id=@store_id and client_type=@client_type--获取终端销售服务编号
SET @status=0;
IF(@status=0) --第一步查看商品是否存在活动
BEGIN
SELECT @qty=COUNT(1),@pr_sn=MAX(pr.pr_sn) FROM tb_promot_product pr
JOIN tb_promot p ON pr.pr_sn=p.pr_sn
JOIN tb_promot_client clinet ON p.pr_sn=clinet.pr_sn
WHERE p.end_date>=GETDATE() AND p.pr_state=0 AND ISNULL(pr.product_id,'')<>''
AND product_id=@product_id AND clinet.client_type=@client_type
AND p.pr_type<>'MP' AND p.[is_member]=0 AND (p.store_id=@store_id OR p.store_id='-')
print('---单品打折--'+cast(@qty as varchar(50))+'优惠编号:'+@pr_sn+'商品编号'+@product_id);
IF(@qty>0)
BEGIN
print @server_id
EXEC 促销商品销售价计算 @pr_sn,@product_id,@server_id
SET @status=1
END
END
IF(@status=0) --第二步查看出版社是否存在活动
BEGIN
SELECT @qty=COUNT(1),@pr_sn=MAX(pr.pr_sn) FROM tb_pdt_price p
JOIN book_product_attr a ON p.product_id=a.product_id
JOIN tb_pos_client c ON p.server_id=c.server_id
JOIN tb_promot_product pr ON a.publisher_id=pr.publisher_code
JOIN tb_promot pm ON pr.pr_sn=pm.pr_sn AND pm.end_date>=GETDATE() AND pm.pr_state=0 AND ISNULL(pr.publisher_code,'')<>''
JOIN tb_promot_client clinet ON pm.pr_sn=clinet.pr_sn
WHERE p.product_id=@product_id AND (pm.store_id=@store_id OR pm.store_id='-') AND clinet.client_type=@client_type AND c.client_type=@client_type AND pm.pr_type<>'MP' AND pm.[is_member]=0
print('---出版社打折--'+cast(@qty as varchar(50)));
IF(@qty>0)
BEGIN
EXEC 促销商品销售价计算 @pr_sn,@product_id,@server_id
SET @status=1
END
END
IF(@status=0)--第三级分类
BEGIN
SELECT @qty=COUNT(1),@pr_sn=MAX(pr.pr_sn) FROM tb_pdt_price p
JOIN book_product_attr a ON p.product_id=a.product_id
JOIN tb_pos_client c ON p.server_id=c.server_id
JOIN tb_promot_product pr ON a.display_id=pr.display_id
JOIN tb_promot pm ON pr.pr_sn=pm.pr_sn AND pm.end_date>=GETDATE() AND pm.pr_state=0 AND ISNULL(pr.display_id,'')<>'' AND LEN(pr.display_id)=8
LEFT JOIN tb_promot_client clinet ON pm.pr_sn=clinet.pr_sn
WHERE p.product_id=@product_id AND (pm.store_id=@store_id OR pm.store_id='-') AND c.client_type=@client_type AND clinet.client_type=@client_type AND pm.pr_type<>'MP' AND pm.[is_member]=0
print('---第三级分类打折--'+cast(@qty as varchar(50)));
IF(@qty>0)
BEGIN
EXEC 促销商品销售价计算 @pr_sn,@product_id,@server_id
SET @status=1
END
END
IF(@status=0)--第二级分类
BEGIN
create table #price_display(display_id varchar(50))
--1.定义游标
DECLARE price_adjust CURSOR SCROLL
FOR SELECT display_id FROM tb_promot_product pr
JOIN tb_promot pm ON pr.pr_sn=pm.pr_sn AND pm.end_date>=GETDATE() AND pm.pr_state=0 AND ISNULL(pr.display_id,'')<>'' AND LEN(pr.display_id)=5
JOIN tb_promot_client clinet ON pm.pr_sn=clinet.pr_sn
WHERE pm.pr_type<>'MP' AND clinet.client_type=@client_type
AND (pm.store_id=@store_id OR pm.store_id='-') AND pm.[is_member]=0
--2.打开游标
OPEN price_adjust
--4.定位游标到哪一行
FETCH FIRST FROM price_adjust INTO @display_id --into的变量数量必须与游标查询结果集的列数相同
WHILE @@fetch_status=0 --提取成功,进行下一条数据的提取操作
BEGIN
--写入临时表分类的ID
INSERT INTO #price_display SELECT display_id FROM book_class_display where CHARINDEX(','+replace(@display_id,' ','')+',',','+family_ids) >0
FETCH NEXT FROM price_adjust INTO @display_id --移动游标
END
--关闭游标
CLOSE price_adjust
--释放游标
DEALLOCATE price_adjust
SELECT @qty=COUNT(1),@display_ids=MAX(play.display_id) FROM tb_pdt_price p
JOIN book_product_attr a ON p.product_id=a.product_id
JOIN tb_pos_client c ON p.server_id=c.server_id
JOIN #price_display play ON a.display_id=play.display_id
WHERE p.product_id=@product_id AND c.store_id=@store_id AND client_type=@client_type
print('---第二级分类打折--'+cast(@qty as varchar(50)));
IF(@qty>0)
BEGIN
SELECT @pr_sn=pr_sn FROM tb_promot WHERE pr_sn IN(
SELECT MAX(pr.pr_sn) FROM tb_promot_product pr
JOIN tb_promot pm ON pr.pr_sn=pm.pr_sn AND pm.end_date>=GETDATE() AND pm.pr_state=0 AND ISNULL(pr.display_id,'')<>'' AND
pr.display_id= LEFT(@display_ids,5))
EXEC 促销商品销售价计算 @pr_sn,@product_id,@server_id
DROP TABLE #price_display
SET @status=1
END
END
IF(@status=0)--第一级分类
BEGIN
create table #price_display1(display_id varchar(50))
--1.定义游标
DECLARE price_adjust CURSOR SCROLL
FOR SELECT display_id FROM tb_promot_product pr
JOIN tb_promot pm ON pr.pr_sn=pm.pr_sn AND pm.end_date>=GETDATE() AND pm.pr_state=0 AND ISNULL(pr.display_id,'')<>'' AND ( LEN(pr.display_id)=2 OR pr.display_id='ROOT' )
JOIN tb_promot_client clinet ON pm.pr_sn=clinet.pr_sn
JOIN tb_pos_client c ON pm.server_id=c.server_id
WHERE pm.pr_type<>'MP' AND clinet.client_type=@client_type AND c.client_type=@client_type
AND (pm.store_id=@store_id OR pm.store_id='-') AND pm.[is_member]=0
--2.打开游标
OPEN price_adjust
--4.定位游标到哪一行
FETCH FIRST FROM price_adjust INTO @display_id --into的变量数量必须与游标查询结果集的列数相同
WHILE @@fetch_status=0 --提取成功,进行下一条数据的提取操作
BEGIN
--写入临时表分类的ID
INSERT INTO #price_display1 SELECT display_id FROM book_class_display where CHARINDEX(','+replace(@display_id,' ','')+',',','+family_ids) >0
FETCH NEXT FROM price_adjust INTO @display_id --移动游标
END
--关闭游标
CLOSE price_adjust
--释放游标
DEALLOCATE price_adjust
SELECT @qty=COUNT(1),@display_ids=MAX(play.display_id) FROM tb_pdt_price p
JOIN book_product_attr a ON p.product_id=a.product_id
JOIN tb_pos_client c ON p.server_id=c.server_id
JOIN #price_display1 play ON a.display_id=play.display_id
WHERE p.product_id=@product_id AND c.store_id=@store_id AND client_type=@client_type
print('---第一级分类打折--'+cast(@qty as varchar(50)));
IF(@qty>0)
BEGIN
SELECT @pr_sn=pr_sn FROM tb_promot WHERE pr_sn IN(
SELECT MAX(pr.pr_sn) FROM tb_promot_product pr
JOIN tb_promot pm ON pr.pr_sn=pm.pr_sn AND pm.end_date>=GETDATE() AND pm.pr_state=0 AND ISNULL(pr.display_id,'')<>'' AND pm.[is_member]=0 AND
(pr.display_id= LEFT(@display_ids,2) OR pr.display_id='ROOT') )
EXEC 促销商品销售价计算 @pr_sn,@product_id,@server_id
DROP TABLE #price_display1
SET @status=1
END
END
END
存储过程,游标
猜你喜欢
转载自www.cnblogs.com/xielideboke/p/9851166.html
今日推荐
周排行