评论此SQL存储过程
下面是一个合同开发人员为我编写的大型存储过程,我觉得我在挑开发人员的毛病,但这太糟糕了。你能看到它的主要问题是什么评论此SQL存储过程,sql,stored-procedures,Sql,Stored Procedures,下面是一个合同开发人员为我编写的大型存储过程,我觉得我在挑开发人员的毛病,但这太糟糕了。你能看到它的主要问题是什么 CREATE PROCEDURE [dbo].[usp_SHS_XXXX] ( @request_identifier varchar(255), @category_guids varchar(4000), @url varchar(500), @section_id int, @NoOfDaysToRank int = 45,
CREATE PROCEDURE [dbo].[usp_SHS_XXXX]
(
@request_identifier varchar(255),
@category_guids varchar(4000),
@url varchar(500),
@section_id int,
@NoOfDaysToRank int = 45,
@SaleRankWeight decimal(18,2) = 1.0,
@QuantityRankWeight decimal(18,2) = 1.0,
@NewItemWeight decimal(18,2) = 0.2
)
AS
BEGIN
SET NOCOUNT ON
declare @tblCatAttrFilteredPhysicalItems table
(
[request_identifier] [uniqueidentifier] NULL,
[item_guid] [uniqueidentifier] NULL,
[item_cd] [varchar](25) NULL,
[master_guid] [uniqueidentifier] NULL,
[item_type_id] [int] NULL,
[item_description_title] [varchar](100) NULL,
[item_description_short] [varchar](255) NULL,
[item_description] [varchar](3000) NULL,
[item_retail_price] [decimal](18, 2) NULL,
[item_sale_price] [decimal](18, 2) NULL,
[item_backorderable] [int] NULL,
[item_discontinued] [int] NULL,
[item_available] [int] NULL,
[item_catalog_guid] [uniqueidentifier] NULL,
[item_image_counter] [int] NULL,
[item_color] [varchar](255) NULL,
[item_gender] [varchar](255) NULL,
[item_age_group] [varchar](255) NULL,
[item_price_updated] [varchar](25) NULL,
[item_licensor] [varchar](255) NULL,
[item_manufacturer] [varchar](255) NULL,
[item_primary_license] [varchar](255) NULL,
[item_series] [varchar](255) NULL,
[item_size] [varchar](255) NULL,
[item_associated_hero] [varchar](255) NULL,
[item_tshirt_attributes] [varchar](255) NULL,
[item_date_counted] [varchar](25) NULL,
[item_hide_from_search] [varchar](255) NULL,
[item_holiday] [varchar](255) NULL,
[item_material] [varchar](255) NULL,
[item_newphoto_needed] [varchar](255) NULL,
[item_sleeve_type] [varchar](255) NULL,
[item_softness] [varchar](255) NULL,
[item_created] [datetime] NULL,
[item_approved] [int] NULL,
[item_quantity_on_hand] [int] NULL,
[item_quantity_on_hold] [int] NULL,
[item_quantity_on_order] [int] NULL,
[item_weight] [decimal](18,2) NULL,
[is_item_new] [varchar](5) NULL,
[category_guid] [varchar](255) NULL,
[category_name] [varchar](50) NULL,
[item_quantity] [int],
[item_price_adjustment_value] [decimal](16,6),
[item_control_link] [nvarchar](500),
[item_promotion] [nvarchar](255),
[item_price_adjustment] [decimal](16,6)
)
declare
@attribute_cd varchar(255),
@attribute_value varchar(6000),
@tmpAttrValue varchar(255),
@first_section_id int;
declare @primary_license varchar(255);
select @primary_license = primaryLicense from pageData
where url = @url;
declare curSecAttr cursor for
select attribute_cd,attribute_value from shs_page_section_attributes
where url = @url and section_id = @section_id;
declare @show_only_new char(5);
select @show_only_new = ISNULL(show_only_new, 'N')
from shs_page_sections
where url = @url
AND section_id = @section_id;
insert into @tblCatAttrFilteredPhysicalItems
select
@request_identifier,i.*
from mf_item_detail i
inner join mf_item_detail mi
on i.master_guid = mi.item_guid
inner join mf_item_categories ic
on mi.item_guid = ic.item_guid
where ic.category_guid in (select item from dbo.udfSplit(@category_guids,'#'))
and mi.item_image_counter > 0
and mi.item_discontinued = 0
and mi.item_type_id = 3
and i.item_quantity > 0
UNION
select
@request_identifier,i.*
from mf_item_detail i
inner join mf_item_categories ic
on i.item_guid = ic.item_guid
where ic.category_guid in (select item from dbo.udfSplit(@category_guids,'#'))
and i.item_image_counter > 0
and i.item_discontinued = 0
and i.item_type_id = 1
and i.master_guid IS NULL
and i.item_quantity > 0;
select * into #tmpCatAttrFilteredItems from @tblCatAttrFilteredPhysicalItems;
update #tmpCatAttrFilteredItems
set item_color = mi.item_color,
item_gender = mi.item_gender,
item_holiday = mi.item_holiday,
item_age_group = mi.item_age_group,
item_licensor = mi.item_licensor,
item_manufacturer = mi.item_manufacturer,
item_material = mi.item_material,
item_primary_license = mi.item_primary_license,
item_series = mi.item_series,
item_sleeve_type = mi.item_sleeve_type,
item_softness = mi.item_softness,
item_tshirt_attributes = mi.item_tshirt_attributes,
item_promotion = mi.item_promotion
from mf_item_detail mi
where mi.item_guid = #tmpCatAttrFilteredItems.master_guid
and #tmpCatAttrFilteredItems.item_type_id = 1
and #tmpCatAttrFilteredItems.master_guid is not null
and request_identifier = @request_identifier;
select * into #tblTmpResultSet from #tmpCatAttrFilteredItems where 1 = 2;
open curSecAttr;
fetch curSecAttr into @attribute_cd,@attribute_value;
while(@@FETCH_STATUS = 0)
begin
if(@attribute_cd = 'AssociatedHero')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_associated_hero,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_associated_hero,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Color')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_color,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_color,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier; ;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Gender')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_gender,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_gender,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Holiday')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_holiday,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_holiday,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Promotion')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_promotion,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_promotion,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'IntendedAgeGroup')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_age_group,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_age_group,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Licensor')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_licensor,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_licensor,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Manufacturer')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_manufacturer,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_manufacturer,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Material')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_material,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_material,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'PrimaryLicense')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_primary_license,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_primary_license,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Series')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_series,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_series,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Size')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_size,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_size,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'SleeveType')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_sleeve_type,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_sleeve_type,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'Softness')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_softness,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_softness,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
if(@attribute_cd = 'T-ShirtAttributes')
begin
if (charIndex(',',@attribute_value) > 0)
begin
declare cur_AttrValue cursor for
select item from dbo.udfSplit(@attribute_value,',');
open cur_AttrValue;
fetch cur_AttrValue into @tmpAttrValue;
while (@@FETCH_STATUS = 0)
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @tmpAttrValue in (select item from dbo.udfSplit(item_tshirt_attributes,','))
and request_identifier = @request_identifier;
fetch cur_AttrValue into @tmpAttrValue;
end
close cur_AttrValue;
deallocate cur_AttrValue;
end
else
begin
insert into #tblTmpResultSet
select * from #tmpCatAttrFilteredItems
where @attribute_value in (select item from dbo.udfSplit(item_tshirt_attributes,','))
and request_identifier = @request_identifier;
end
delete from #tmpCatAttrFilteredItems where request_identifier = @request_identifier;
insert into #tmpCatAttrFilteredItems
select * from #tblTmpResultSet where request_identifier = @request_identifier;
delete from #tblTmpResultSet where request_identifier = @request_identifier;
end
fetch curSecAttr into @attribute_cd,@attribute_value;
end
close curSecAttr;
deallocate curSecAttr;
declare @tblFilteredItems table
(
request_identifier uniqueidentifier,
item_guid varchar(255),
item_cd varchar(25),
master_guid varchar(255),
item_quantity int,
item_created datetime,
item_approved int,
sale_rank decimal(18,2) NULL,
qoh_rank decimal(18,2) NULL,
new_item_flag int NULL,
item_rank decimal(18,2) NULL,
is_item_new varchar(5)
);
declare @tblFilteredOrderItems table
(
request_identifier uniqueidentifier,
item_guid varchar(255),
item_cd varchar(25),
master_guid varchar(255),
item_quantity int,
order_item_quantity int,
order_item_quantity_fulfilled int,
item_created datetime,
item_approved int,
sale_rank decimal(18,2) NULL,
qoh_rank decimal(18,2) NULL,
new_item_flag int NULL,
item_rank decimal(18,2) NULL,
is_item_new varchar(5)
);
declare @tblFinalResultItems table
(
request_identifier uniqueidentifier,
item_guid varchar(255),
item_cd varchar(25),
master_guid varchar(255),
item_quantity int,
order_item_quantity int,
order_item_quantity_fulfilled int,
item_created datetime,
item_approved int,
sale_rank numeric(18,5) NULL,
qoh_rank numeric(18,5) NULL,
new_item_flag int NULL,
item_rank numeric(18,5) NULL,
is_item_new varchar(5)
);
declare
@TotNoOfItems int,
@MaxOrderQuantity int,
@MaxQtyOnHand int;
insert into @tblFilteredOrderItems
(request_identifier,item_guid,item_cd,master_guid,item_quantity,order_item_quantity,order_item_quantity_fulfilled,item_created,item_approved,is_item_new)
select
distinct @request_identifier,
oi.item_guid,
min(i.item_cd) as item_cd,
i.master_guid as master_guid,
sum(i.item_quantity) as item_quantity,
sum(oi.order_item_quantity) as order_item_quantity,
sum(oi.order_item_quantity_fulfilled) as order_item_quantity_fulfilled,
MIN(i.item_created) as item_created,
avg(i.item_approved) as item_approved,
min(i.is_item_new) as is_item_new
from mf_order_items oi
inner join #tmpCatAttrFilteredItems i
on i.item_guid = oi.item_guid
inner join mf_orders o
on o.order_guid = oi.order_guid
where o.order_date between getdate()-@NoOfDaysToRank and getdate()
and i.master_guid is NULL
group by oi.item_guid,i.master_guid
UNION
select
distinct @request_identifier,
mi.item_guid,
min(mi.item_cd) as item_cd,
mi.master_guid as master_guid,
sum(i.item_quantity) as item_quantity,
sum(oi.order_item_quantity) as order_item_quantity,
sum(oi.order_item_quantity_fulfilled) as order_item_quantity_fulfilled,
MIN(mi.item_created) as item_created,
min(mi.item_approved) as item_approved,
min(mi.is_item_new) as is_item_new
from mf_order_items oi
inner join #tmpCatAttrFilteredItems i
on i.item_guid = oi.item_guid
inner join mf_item_detail mi
on mi.item_guid = i.master_guid
inner join mf_orders o
on o.order_guid = oi.order_guid
where o.order_date between getdate()-@NoOfDaysToRank and getdate()
and i.master_guid is NOT NULL
group by oi.item_guid,mi.item_guid,mi.master_guid;
insert into @tblFilteredItems
(request_identifier,item_guid,item_cd,master_guid,item_quantity,item_created,item_approved,is_item_new)
select
distinct @request_identifier,
item_guid,
item_cd as
太长了。你想让我们同意你的观点,那很糟糕吗
如果它符合您的要求,那么我看不出问题出在哪里。好吧,请快速阅读,但我马上想到两件事:
- 把它分解成更小的程序!这将使维护更加容易
- 它使用游标。也许有一种不用光标就能解决同样问题的方法。依我看,如果可能的话,应该避免使用游标(特别是因为游标与SQL Server基于集合的方法背道而驰,而且速度非常慢)
- 没有评论
将它拆分为几个较小的存储过程可能是有意义的,尽管我怀疑去掉游标和一些注释会使它更容易理解。基于快速回顾,我首先要问的是大量的IF块集。它们看起来都很相似,应该加以整合。而且,一般来说,它很长 我也不喜欢使用区分大小写的If语句。太容易因为在某些设置中忘记大写第一个字母而把事情搞砸。tl;dr 说真的-你的主要抱怨是什么?是否按照要求执行?是否需要更好地记录 批评
它丑陋不堪,无法维护。太长了。它的结构很差。看起来它在一次会议中很快就被敲掉了。看起来它会跑得很慢。它看起来非常容易断裂。所有这些IF块看起来都是重复的。我怀疑这一切都可以重写为一条语句,也许没有游标。但是,如果性能不是问题,而且它是有效的,我看不出这有什么明显的问题。正如所写的,它非常长,但使用了表变量,因此将其分解为更小的过程会很尴尬
declare curSecAttr cursor for
select attribute_cd,attribute_value from
shs_page_section_attributes
where url = @url and section_id = @section_id;
光标不是LOCAL——这可能会
如果两个SP将同时运行,则会导致错误-有关详细信息,请参见[MSDN:Transact-SQL游标名称的范围](declare @show_only_new char(5);
select @show_only_new = ISNULL(show_only_new, 'N')
@show\u only\u new
的值将是“N\uuuu\uu
”,其中
是空格,如果列show\u only\u new
的值为空。在过去,我看到一些与VARCHAR变量的比较在代码中引入了微妙的bug@attribute_cd
的值似乎是硬编码的。这是不好的做法在这段长代码中可能隐藏着许多其他问题和流程,这是它的下一个坏处…作为一般原则,T-SQL是一种声明性语言,即您告诉它您想要什么,SQL Server(我假设)会解决如何获得结果 我的主要批评不是“长度”、“光标”(虽然它们本身是问题的第一个症状)或“缓慢”(没有数据集,所以不能说) 这个过程是强制编写的,它告诉SQL要做什么,按照什么顺序,才能得到想要的结果,就像你用C#等语言编写程序一样。我看到了游标,我认为:这个程序员没有完全掌握SQL的基于集合的本质。这至少会导致两个问题: