存储过程的转载

转载:http://blog.sina.com.cn/s/blog_62fcf1970100gecz.html

 

 

 

今天写了一个小小的存储过程,是用于模块查询功能,注:考虑到那个所谓的万能存储过程虽功能强,但效率极低,于是乎自己手写一个,不带分页.多表综合性的查询。这里只列举两表联合查询。

主要功能:完成了多表间 根据ID查询、根据名称查询(支持模糊查询)、根据类型查询(支持排序方式、条数)

根据发布人查询(支持模糊查询、排序功能、条数)查询全部、查询N条数据...

本人声明:本存储过程适合初学者参考以及将多个查询综合起来管理。由于本人SQL语言不是很好,不足之处请指教,同时请SQL高手们多多指教。。。

-- 查询内部视频
--@FilmId     视频标识
--@FilmName   视频名称
--@UserId     发布人
--@TopNum     条数
--@FilmTypeId 类型
--@ColumsFilm 列名
--@OrderStr   排序方式
CREATE PROCEDURE proc_Select_NewInternalFilm
 @FilmId int,--视频ID
 @FilmName nvarchar(100),--视频名称
 @TopNum int,--条数
 @FilmTypeId int,--视频类型
 @UserId nvarchar(150),--发布视频者
 @ColumsFilm varchar(50),--列名
 @OrderStr varchar(50)--排序方式 desc asc
AS
 declare @sql varchar(500)
 
 if(@FilmId<>0)--根据视频ID查询
  begin
   set @sql='select i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId and FilmId='+Convert(varchar(50),@FilmId)+''
  end
 else
     begin
         if(@FilmName<>'')--根据视频名称查询(支持模糊查询)
            begin
                set @sql='select i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId and FilmName like '+@FilmName+''
            end
         else
             begin
                 if(@FilmTypeId<>0)--根据视频类型查询
                    begin
                        if(@TopNum<>0)--条数过滤
                           begin
                               set @sql='select top '+Convert(varchar(5),@TopNum)+' i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId and f.FilmTypeId='+Convert(varchar(50),@FilmTypeId)+' order by '+@ColumsFilm+' '+@OrderStr+''
                           end
                        else
                           begin
                               set @sql='select i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId and f.FilmTypeId='+Convert(varchar(50),@FilmTypeId)+' order by '+@ColumsFilm+' '+@OrderStr+''
                           end
                    end
                 else
                    begin
                        if(@UserId<>'')
                           begin
                               if(@TopNum<>0)--条数过滤
           begin
            set @sql='select top '+Convert(varchar(5),@TopNum)+' i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId and UserId like '+Convert(varchar(50),@UserId)+' order by '+@ColumsFilm+' '+@OrderStr+''
           end
           else
           begin
            set @sql='select i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId and UserId like '+Convert(varchar(50),@UserId)+' order by '+@ColumsFilm+' '+@OrderStr+''
           end
                           end
                        else
                           begin
                               if(@TopNum<>0)--查询前N条数据
           begin
            set @sql='select top '+Convert(varchar(5),@TopNum)+' i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId order by '+@ColumsFilm+' '+@OrderStr+''
           end
           else
           begin     --查询全部数据
            set @sql='select i.*,f.FilmTypeName from InternalFilm i,FilmType f where i.FilmTypeId=f.FilmTypeId order by '+@ColumsFilm+' '+@OrderStr+''
           end
                           end
                    end
             end
     end
 print(@sql)
 exec(@sql)

posted @ 2010-04-29 17:37  沼渊  阅读(242)  评论(0编辑  收藏  举报