Я использую курсор в SQL Server 2005, правильно это или нет? - PullRequest
0 голосов
/ 28 сентября 2011

На странице aspx у меня есть два раскрывающихся списка, который представляет собой раскрывающийся список фестиваля и раскрывающийся список года соответственно, когда пользователь выбирает одно значение в фестивале, например Рождество и раскрывающийся список года, предположим, что 2011 год, так что все детали фильма должны выглядеть в aspВот почему я использую курсор в SQL Server 2005, но с некоторым условием

  1. пользователь может выбрать значение из выпадающего списка года. «Все» фестиваль должен быть индивидуальным.
  2. год должен бытьИндивидуальный и случайный Индивидуальный
  3. год должен быть Индивидуальным и случайный Индивидуальный

3-е состояние Я закончил, но 1-е и 2-е условия как я могу не получить ...?

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[Sp_OccasionMovieDetails]

@OrderBy varchar(100),
@year_val varchar(50),
@occasion_val varchar(50)
As


 --[Sp_OccasionMovieDetails] 'Release_Date', '2011', '0'

Set nocount on

declare @Curr_Contri_1 int;
declare @Curr_Contri_2 int;
declare @Curr_Contri_3 int;
declare @Curr_Contri_4 int;
declare @Percent_2 bigint;
declare @Percent_3 bigint;
declare @Percent_4 bigint;
declare @Class_2 varchar(100);
declare @Class_3 varchar(100);
declare @Class_4 varchar(100);
declare @Id_Movie varchar(100);
declare @Release_Date datetime;
declare @MovieTitle varchar(100);
--declare @Id_festival1 varchar(100);
declare @id_festival_new varchar(50);
declare @fromdate varchar(50);
declare @todate varchar(50);
declare @festivalname varchar(50);

--Year All and ocassion Individual selected

if(@year_val='0' and @occasion_val<>'0')
begin

    print '1'

end


----year individual and ocassion individual selected

else if (@year_val<>'0' and @Occasion_val<>'0')
begin 
    print '2'

    declare List cursor for
    select md.id_festival, md.fromdate, md.todate, mf.festivalname  from BTNN_MovieDB_Festival_Details md, BTNN_MovieDB_Festival mf where md.id_festival=mf.id_festival and md.syncoperation<>'D' and mf.syncoperation<>'D' and year(md.fromdate)=@year_val order by mf.festivalname
    OPEN List 
    FETCH NEXT FROM List INTO @id_festival_new, @fromdate, @todate, @festivalname
    WHILE @@FETCH_STATUS = 0
    BEGIN

        select @id_festival_new as id_festival, @fromdate as fromdate, @todate as todate, @festivalname as festivalname, 'occasion' as flag

        declare currMovieYearMain cursor for
        select top 25 id_movie ,movietitle, release_date 
        from (
                select id_movie ,movietitle, release_date 
                from View_Territory
                where (release_date between @fromdate and @todate)and territorycat=0
                group by id_movie ,MovieTitle, release_date
        ) as x
                ORDER BY CASE WHEN @OrderBy = 'MovieTitle' THEN movietitle end,
                         CASE WHEN @OrderBy = 'ReleaseDate' THEN release_date end desc

        open currMovieYearMain
            fetch next from currMovieYearMain into @Id_movie,@MovieTitle,@Release_Date
            while @@fetch_status=0
        begin
            select @Curr_Contri_1=sum(territory_total) from view_territory where territorycat=0
            and id_movie=@Id_movie and week=1
            set @Curr_Contri_1=isnull(@Curr_Contri_1,0)

            select @Curr_Contri_2=sum(territory_total) from view_territory where territorycat=0
            and id_movie=@Id_movie and week=2
            set @Curr_Contri_2=isnull(@Curr_Contri_2,0)

            if @Curr_Contri_1 is not null and @Curr_Contri_1<>0 and @Curr_Contri_2<>0
        begin
            set @Class_2='green'
            set @Percent_2=(cast(@Curr_Contri_2 as bigint)*100)/@Curr_Contri_1

            if @Percent_2>0
        begin
            set @Percent_2=@Percent_2-100
        end
            else
        begin
            set @Percent_2=0
        end

            if @Curr_Contri_1>@Curr_Contri_2
        begin
            set @Percent_2=0-@Percent_2
            set @Class_2='redsmall'
        end

            else if @Curr_Contri_1=@Curr_Contri_2
        begin
            set @Percent_2=0
            set @Class_2=null
        end
        end
            else
        begin
            set @Percent_2=0
            set @Class_2=null
        end

            select @Curr_Contri_3=sum(territory_total) from view_territory where territorycat=0
            and id_movie=@Id_movie and week=3
            set @Curr_Contri_3=isnull(@Curr_Contri_3,0)

            if @Curr_Contri_3=isnull(@Curr_Contri_3,0)

            if @Curr_Contri_2 is not null and @Curr_Contri_2 <> 0 and @Curr_Contri_3 <> 0
        begin
            set @Class_3='green'
            set @Percent_3=(cast(@Curr_Contri_3 as bigint)*100)/@Curr_Contri_2

            if @Percent_3 > 0
        begin
            set @Percent_3=@Percent_3-100
        end
            else 
        begin
            set @Percent_3=0
        end
            if @Curr_Contri_2 > @Curr_Contri_3
        begin
            set @Percent_3=0-@Percent_3
            set @Class_3='redsmall'
        end 
            else if @Curr_Contri_2=@Curr_Contri_3
        begin
            set @Percent_3=0
            set @Class_3=null
        end
        end
            else
        begin
            set @Percent_3=0
            set @Class_3=null
        end

            select @Curr_Contri_4=sum(territory_total) from View_Territory where territorycat=0
            and id_movie=@Id_Movie and week=4
            set @Curr_Contri_4=isnull(@Curr_Contri_4,0)

            if @Curr_Contri_3 is not null and @Curr_Contri_3 <>0 and @Curr_Contri_4 <> 0
        begin
            set @Class_4='green'
            set @Percent_4=(cast(@Curr_Contri_4 as bigint)*100)/@Curr_Contri_3

            if @Percent_4 >0
        begin
            set @Percent_4=@Percent_4-100
        end

            else
        begin
            set @Percent_4=0
        end

            if @Curr_Contri_3>@Curr_Contri_4
        begin
            set @Percent_4=0-@Percent_4
            set @Class_4='redsmall'
        end

            else if @Curr_Contri_3=@Curr_Contri_4
        begin
            set @Percent_4=0
            set @Class_4=null
        end
        end

            else 
        begin
            set @Percent_4=0
            set @Class_4=null
        end

            select @Id_Movie as Id_Movie, @MovieTitle as MovieTitle,@Curr_Contri_1 as Curr_Contri_1, @Curr_Contri_2 as Curr_Contri_2, 
            @Class_2 as Class_2, @Percent_2 as PerChange_2, @Curr_Contri_3 as Curr_Contri_3,
            @Class_3 as Class_3,@Percent_3 as PerChange_3, @Curr_Contri_4 as Curr_Contri_4,
            @Class_4 as Class_4,@Percent_4 as PerChange_4, @Release_Date as Release_Date, 'movies' as flag

            fetch next from currMovieYearMain into @Id_Movie,@Movietitle,@Release_Date
        End
            close CurrMovieYearMain
            Deallocate CurrMovieYearMain

        FETCH NEXT FROM List INTO @id_festival_new, @fromdate, @todate, @festivalname
    END
    CLOSE List
    DEALLOCATE List 
end



----- Year Individual and ocassion All selected
else if(@year_val<>'0' and @Occasion_val='0')
begin

    print '3'

    declare List cursor for
    select md.id_festival, md.fromdate, md.todate, mf.festivalname  from BTNN_MovieDB_Festival_Details md, BTNN_MovieDB_Festival mf where md.id_festival=mf.id_festival and md.syncoperation<>'D' and mf.syncoperation<>'D' and year(md.fromdate)=@year_val order by mf.festivalname
    OPEN List 
    FETCH NEXT FROM List INTO @id_festival_new, @fromdate, @todate, @festivalname
    WHILE @@FETCH_STATUS = 0
    BEGIN

        select @id_festival_new as id_festival, @fromdate as fromdate, @todate as todate, @festivalname as festivalname, 'occasion' as flag

        declare currMovieYearMain cursor for
        select top 25 id_movie ,movietitle, release_date 
        from (
                select id_movie ,movietitle, release_date 
                from View_Territory
                where (release_date between @fromdate and @todate) and territorycat=0
                group by id_movie ,MovieTitle, release_date
        ) as x
                ORDER BY CASE WHEN @OrderBy = 'MovieTitle' THEN movietitle end,
                         CASE WHEN @OrderBy = 'ReleaseDate' THEN release_date end desc

        open currMovieYearMain
            fetch next from currMovieYearMain into @Id_movie,@MovieTitle,@Release_Date
            while @@fetch_status=0
        begin
            select @Curr_Contri_1=sum(territory_total) from view_territory where territorycat=0
            and id_movie=@Id_movie and week=1
            set @Curr_Contri_1=isnull(@Curr_Contri_1,0)

            select @Curr_Contri_2=sum(territory_total) from view_territory where territorycat=0
            and id_movie=@Id_movie and week=2
            set @Curr_Contri_2=isnull(@Curr_Contri_2,0)

            if @Curr_Contri_1 is not null and @Curr_Contri_1<>0 and @Curr_Contri_2<>0
        begin
            set @Class_2='green'
            set @Percent_2=(cast(@Curr_Contri_2 as bigint)*100)/@Curr_Contri_1

            if @Percent_2>0
        begin
            set @Percent_2=@Percent_2-100
        end
            else
        begin
            set @Percent_2=0
        end

            if @Curr_Contri_1>@Curr_Contri_2
        begin
            set @Percent_2=0-@Percent_2
            set @Class_2='redsmall'
        end

            else if @Curr_Contri_1=@Curr_Contri_2
        begin
            set @Percent_2=0
            set @Class_2=null
        end
        end
            else
        begin
            set @Percent_2=0
            set @Class_2=null
        end

            select @Curr_Contri_3=sum(territory_total) from view_territory where territorycat=0
            and id_movie=@Id_movie and week=3
            set @Curr_Contri_3=isnull(@Curr_Contri_3,0)

            if @Curr_Contri_3=isnull(@Curr_Contri_3,0)

            if @Curr_Contri_2 is not null and @Curr_Contri_2 <> 0 and @Curr_Contri_3 <> 0
        begin
            set @Class_3='green'
            set @Percent_3=(cast(@Curr_Contri_3 as bigint)*100)/@Curr_Contri_2

            if @Percent_3 > 0
        begin
            set @Percent_3=@Percent_3-100
        end
            else 
        begin
            set @Percent_3=0
        end
            if @Curr_Contri_2 > @Curr_Contri_3
        begin
            set @Percent_3=0-@Percent_3
            set @Class_3='redsmall'
        end 
            else if @Curr_Contri_2=@Curr_Contri_3
        begin
            set @Percent_3=0
            set @Class_3=null
        end
        end
            else
        begin
            set @Percent_3=0
            set @Class_3=null
        end

            select @Curr_Contri_4=sum(territory_total) from View_Territory where territorycat=0
            and id_movie=@Id_Movie and week=4
            set @Curr_Contri_4=isnull(@Curr_Contri_4,0)

            if @Curr_Contri_3 is not null and @Curr_Contri_3 <>0 and @Curr_Contri_4 <> 0
        begin
            set @Class_4='green'
            set @Percent_4=(cast(@Curr_Contri_4 as bigint)*100)/@Curr_Contri_3

            if @Percent_4 >0
        begin
            set @Percent_4=@Percent_4-100
        end

            else
        begin
            set @Percent_4=0
        end

            if @Curr_Contri_3>@Curr_Contri_4
        begin
            set @Percent_4=0-@Percent_4
            set @Class_4='redsmall'
        end

            else if @Curr_Contri_3=@Curr_Contri_4
        begin
            set @Percent_4=0
            set @Class_4=null
        end
        end

            else 
        begin
            set @Percent_4=0
            set @Class_4=null
        end

            select @Id_Movie as Id_Movie, @MovieTitle as MovieTitle,@Curr_Contri_1 as Curr_Contri_1, @Curr_Contri_2 as Curr_Contri_2, 
            @Class_2 as Class_2, @Percent_2 as PerChange_2, @Curr_Contri_3 as Curr_Contri_3,
            @Class_3 as Class_3,@Percent_3 as PerChange_3, @Curr_Contri_4 as Curr_Contri_4,
            @Class_4 as Class_4,@Percent_4 as PerChange_4, @Release_Date as Release_Date, 'movies' as flag

            fetch next from currMovieYearMain into @Id_Movie,@Movietitle,@Release_Date
        End
            close CurrMovieYearMain
            Deallocate CurrMovieYearMain

        FETCH NEXT FROM List INTO @id_festival_new, @fromdate, @todate, @festivalname
    END
    CLOSE List
    DEALLOCATE List 

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...