动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > 数据库技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 数据库技巧 ]的信息

本月文章推荐
.查看当前进程,或死锁进程,并能自.
.[SQLServer2000]TEMPDB丢失或TEM.
.查看SQL Server数据空间分配情况.
.SQL Server 2005中的T-SQL增强.
.SQL Server 2005改进后的几个实用.
.教你快速掌握数据库设计的五种常.
.SQL Server数据库文件恢复技术.
.获取SQL Server的当前连接数.
.sql2k中新增加的Function的sqlbo.
.SQL Server 数据库连接字符串的声.
.SQL SERVER数据库开发之存储过程.
.SQL Server连接失败错误故障的分.
.SQL Server 性能调优.
.高级自定义查询、分页、多表联合.
.更改数据库表中现有行内的任何或.
.深入讲解"InnoDB"和"MyISAM"的不.
.sql存储过程分页算法研究.
.SQL中使用关系代数合并数据.
.mssql锁基础教程.
.利用SQL Server 2005减轻生产服务.

高级自定义查询、分页、多表联合存储过程

文章类别:数据库技巧 | 发表日期:2006-8-25 |


分页存储过程代码如下:
ALTER PROCEDURE [dbo].[Task_SelectPagedAndSorted]
(
    @ProjectID uniqueidentifier,
    @ProjectAreaID uniqueidentifier,
    @DepartmentID uniqueidentifier,
    @ChiefID uniqueidentifier,
    @State nvarchar(32),
    @Priority int,
    @Triage nvarchar(32),
    @PlanStartDateF datetime,
    @PlanStartDateL datetime,
    @PlanEndDateF datetime,
    @PlanEndDateL datetime,
    @CompletedDateF datetime,
    @CompletedDateL datetime,
    @SortExpression nvarchar(256),
    @StartRowIndex int,
    @MaximumRows int
)   
AS

DECLARE @sql nvarchar(4000)
DECLARE @ViewSql nvarchar(4000)
DECLARE @WhereClause nvarchar(2000)
DeCLARE @FEndRowIndex int
DeCLARE @FStartRowIndex int
DeCLARE @FMaximumRows int
DeCLARE @FSortExpression nvarchar(256)

-- Make sure a @sortExpression is specified
IF LEN(@SortExpression) > 0
  SET @FSortExpression = @SortExpression
ELSE
  SET @FSortExpression = 'ChangedDate DESC'

if (@StartRowIndex is null)
  SET @FStartRowIndex = 0;
else
  SET @FStartRowIndex = @StartRowIndex
if (@MaximumRows is null) or (@MaximumRows <= 0)
  SET @FMaximumRows = 1000;
else
  SET @FMaximumRows = @MaximumRows

SET @FEndRowIndex = @FStartRowIndex + @FMaximumRows

SET @WhereClause = 'WHERE --'
if not ((@ProjectID is null) or (@ProjectID = '00000000-0000-0000-0000-000000000000'))
  SET @WhereClause = @WhereClause + 'AND
    ([ProjectID] = ''' + CAST(@ProjectID as nvarchar(64)) + ''')'
if not ((@ProjectAreaID is null) or (@ProjectAreaID = '00000000-0000-0000-0000-000000000000'))
  SET @WhereClause = @WhereClause + 'AND
    ([ProjectAreaID] = ''' + CAST(@ProjectAreaID as nvarchar(64)) + ''')'
if not ((@DepartmentID is null) or (@DepartmentID = '00000000-0000-0000-0000-000000000000'))
  SET @WhereClause = @WhereClause + 'AND
    ([DepartmentID] = ''' + CAST(@DepartmentID as nvarchar(64)) + ''')'
if not ((@ChiefID is null) or (@ChiefID = '00000000-0000-0000-0000-000000000000'))
  SET @WhereClause = @WhereClause + 'AND
    ([ChiefID] = ''' + CAST(@ChiefID as nvarchar(64)) + ''')'
if  LEN(@State) > 0
  SET @WhereClause = @WhereClause + 'AND
    ([State] = ''' + @State + ''')'
if not ((@Priority is null) or (@Priority < 0))
  SET @WhereClause = @WhereClause + 'AND
    ([Priority] = ' + CONVERT(nvarchar(10), @Priority) + ')'
if  LEN(@Triage) > 0
  SET @WhereClause = @WhereClause + 'AND
    ([Triage] = ''' + @Triage + ''')'
if not (@PlanStartDateF is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanStartDate] is null) or ([PlanStartDate] >= CAST(''' + CAST(@PlanStartDateF as nvarchar)  + ''' AS datetime)))'
if not (@PlanStartDateL is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanStartDate] is null) or ([PlanStartDate] <= CAST(''' + CAST(@PlanStartDateL as nvarchar)  + ''' AS datetime)))'
if not (@PlanEndDateF is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanEndDate] is null) or ([PlanEndDate] >= CAST(''' + CAST(@PlanEndDateF as nvarchar)  + ''' AS datetime)))'
if not (@PlanEndDateL is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanEndDate] is null) or ([PlanEndDate] <= CAST(''' + CAST(@PlanEndDateL as nvarchar)  + ''' AS datetime)))'
if not (@CompletedDateF is null)
  SET @WhereClause = @WhereClause + 'AND
    (([CompletedDate] is null) or ([CompletedDate] >= CAST(''' + CAST(@CompletedDateF as nvarchar)  + ''' AS datetime)))'
if not (@CompletedDateL is null)
  SET @WhereClause = @WhereClause + 'AND
    (([CompletedDate] is null) or ([CompletedDate] <= CAST(''' + CAST(@CompletedDateL as nvarchar)  + ''' AS datetime)))'
if (@WhereClause = 'WHERE --')
  SET @WhereClause = ''
       
SET @sql = '
SELECT
  Task.[TaskID],
  [TaskSQN],
  [TaskName],
  [DepartmentID],
  [ChangerID],
  [CreatedDate],
    (SELECT FullName FROM dbo.UserInfo AS CreatorUser WHERE (dbo.Task.CreatorID = UserID)) AS
  Creator,
  [CreatorID],
  [Triage],
    (SELECT DepartmentName FROM dbo.Department WHERE (dbo.Task.DepartmentID = DepartmentID)) AS
  Department,
  [ChiefID],
    (SELECT FullName FROM dbo.UserInfo AS ChiefUser WHERE (dbo.Task.ChiefID = UserID)) AS
  Chief,
  [ProjectID],
    (SELECT ProjectName FROM dbo.Project WHERE (dbo.Task.ProjectID = ProjectID)) AS
  Project,
  [PlanEndDate],
  [PlanStartDate],
  [CompletedDate],
  [Priority],
  [State],
  [WorkLoad],
    (SELECT TaskName FROM dbo.Task AS ParentTask WHERE (dbo.Task.ParentID = TaskID)) AS
  ParentTask, 
  [ParentID],
    (SELECT ProjectAreaName FROM dbo.ProjectArea WHERE (dbo.Task.ProjectAreaID = ProjectAreaID)) AS
  ProjectArea,
  [ProjectAreaID],
  [Description],
  [Rev],
  [ChangedDate],
    (SELECT FullName FROM dbo.UserInfo AS ChangerUser WHERE (dbo.Task.ChangerID = UserID)) AS
  Changer 
FROM Task,   
    (SELECT
      [TaskID],      
      ROW_NUMBER() OVER (ORDER BY ' + @FSortExpression + ') AS RowRank
    FROM [Task] 
    ' + @WhereClause + '
     ) AS RankTask
WHERE (Task.TaskID = RankTask.TaskID)
  AND (RankTask.RowRank >= ' + CONVERT(nvarchar(10), @FStartRowIndex) + ')
  AND (RankTask.RowRank < ' + CONVERT(nvarchar(10), @FEndRowIndex) + ')
'

SET @ViewSql = '
SELECT
  ViewTask.[TaskID],
  [TaskSQN],
  [TaskName],
  [DepartmentID],
  [ChangerID],
  [CreatedDate],  
  [Creator],
  [CreatorID],
  [Triage],   
  [Department],
  [ChiefID],
  [Chief],
  [ProjectID],
  [Project],
  [PlanEndDate],
  [PlanStartDate],
  [CompletedDate],
  [Priority],
  [State],
  [WorkLoad],
  [ParentTask], 
  [ParentID],
  [ProjectArea],
  [ProjectAreaID],
  [Description],
  [Rev],
  [ChangedDate],
  [Changer] 
FROM ViewTask,   
    (SELECT
      [TaskID],      
      ROW_NUMBER() OVER (ORDER BY ' + @FSortExpression + ') AS RowRank
    FROM [Task] 
    ' + @WhereClause + '
     ) AS RankTask
WHERE (ViewTask.TaskID = RankTask.TaskID)
  AND (RankTask.RowRank >= ' + CONVERT(nvarchar(10), @FStartRowIndex) + ')
  AND (RankTask.RowRank < ' + CONVERT(nvarchar(10), @FEndRowIndex) + ')
'

EXEC sp_executesql @sql     

RETURN
计算Count代码如下:
ALTER PROCEDURE dbo.Task_SelectPagedAndSortedCount
(
    @ProjectID uniqueidentifier,
    @ProjectAreaID uniqueidentifier,
    @DepartmentID uniqueidentifier,
    @ChiefID uniqueidentifier,
    @State nvarchar(32),
    @Priority int,
    @Triage nvarchar(32),
    @PlanStartDateF datetime,
    @PlanStartDateL datetime,
    @PlanEndDateF datetime,
    @PlanEndDateL datetime,
    @CompletedDateF datetime,
    @CompletedDateL datetime,
    @Count int output
)   
AS

DECLARE @sql nvarchar(4000)
DECLARE @WhereClause nvarchar(2000)

SET @WhereClause = 'WHERE --'
if not (@ProjectID is null)
  SET @WhereClause = @WhereClause + 'AND
    ([ProjectID] = CAST(''' + CAST(@ProjectID as nvarchar) + ''') AS uniqueidentifier)'
if not (@ProjectAreaID is null)
  SET @WhereClause = @WhereClause + 'AND
    ([ProjectAreaID] = CAST(''' + CAST(@ProjectAreaID as nvarchar) + ''') AS uniqueidentifier)'
if not (@DepartmentID is null)
  SET @WhereClause = @WhereClause + 'AND
    ([DepartmentID] = CAST(''' + CAST(@DepartmentID as nvarchar) + ''') AS uniqueidentifier)'
if not (@ChiefID is null)
  SET @WhereClause = @WhereClause + 'AND
    ([ChiefID] = CAST(''' + CAST(@ChiefID as nvarchar) + ''') AS uniqueidentifier)'
if  LEN(@State) > 0
  SET @WhereClause = @WhereClause + 'AND
    ([State] = ''' + @State + ''')'
if not ((@Priority is null) or (@Priority < 0))
  SET @WhereClause = @WhereClause + 'AND
    ([Priority] = ' + CONVERT(nvarchar(10), @Priority) + ')'
if  LEN(@Triage) > 0
  SET @WhereClause = @WhereClause + 'AND
    ([Triage] = ''' + @Triage + ''')'
if not (@PlanStartDateF is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanStartDate] is null) or ([PlanStartDate] >= CAST(''' + CAST(@PlanStartDateF as nvarchar)  + ''' AS datetime)))'
if not (@PlanStartDateL is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanStartDate] is null) or ([PlanStartDate] <= CAST(''' + CAST(@PlanStartDateL as nvarchar)  + ''' AS datetime)))'
if not (@PlanEndDateF is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanEndDate] is null) or ([PlanEndDate] >= CAST(''' + CAST(@PlanEndDateF as nvarchar)  + ''' AS datetime)))'
if not (@PlanEndDateL is null)
  SET @WhereClause = @WhereClause + 'AND
    (([PlanEndDate] is null) or ([PlanEndDate] <= CAST(''' + CAST(@PlanEndDateL as nvarchar)  + ''' AS datetime)))'
if not (@CompletedDateF is null)
  SET @WhereClause = @WhereClause + 'AND
    (([CompletedDate] is null) or ([CompletedDate] >= CAST(''' + CAST(@CompletedDateF as nvarchar)  + ''' AS datetime)))'
if not (@CompletedDateL is null)
  SET @WhereClause = @WhereClause + 'AND
    (([CompletedDate] is null) or ([CompletedDate] <= CAST(''' + CAST(@CompletedDateL as nvarchar)  + ''' AS datetime)))'
if (@WhereClause = 'WHERE --')
  SET @WhereClause = ''

SET @sql = '(
SELECT
  ' + @Count + ' = Count(*)
FROM [Task] 
    ' + @WhereClause + ')'

-- Execute the SQL query
EXEC sp_executesql @sql

RETURN

DataList代码如下:
<atlas:UpdatePanel ID="TaskListUpdatePanel" runat="server" Mode="Conditional">
      <Triggers>
        <atlas:ControlEventTrigger ControlID="TaskFiltButton" EventName="Click" />
        <atlas:ControlEventTrigger ControlID="NewTaskFormView" EventName="ItemInserted" />
      </Triggers>
      <ContentTemplate>
        <asp:DataList ID="TaskListDataList" runat="server" Width="100%" DataSourceID="TaskListDataSource">
          <ItemTemplate>
            <%--<div class="DataListDate">
            </div>--%>
            <div class="DataListItem">
              <div class="DataListTitle">
                <asp:HyperLink ID="TaskListDetailLink" runat="server" NavigateUrl='<%# Eval("TaskID", "~/ControlPanel/WorkItem/TaskDetail.aspx?TaskID={0}") %>' Text='<%# Eval("TaskName") %>'>
                </asp:HyperLink>
              </div>
              <div class="DataListStatus">
                <asp:Label ID="PriorityLabel" runat="server" Text='<%# Eval("Priority") %>'></asp:Label>
                &nbsp;|&nbsp;
                <asp:Label ID="TaskListCompletedDateLabel" runat="server" Text='<%# Eval("CompletedDate", "{0:yyyy-MM-dd}") %>'></asp:Label>
                &nbsp;|&nbsp;
                <asp:Label ID="TaskListStateLabel" runat="server" Text='<%# Eval("State") %>'></asp:Label>
                &nbsp;|&nbsp;
                <asp:Label ID="TriageLabel" runat="server" Text='<%# Eval("Triage") %>'></asp:Label>
              </div>
              <div class="DataListBody">
                <asp:Literal ID="TaskListDescriptionLiteral" runat="server" Text='<%# Eval("Description") %>'></asp:Literal>
              </div>
              <div class="DataListFoot">
                <asp:HyperLink ID="TaskListDepartmentIDLink" runat="server" NavigateUrl='<%# Eval("DepartmentID", "~/ControlPanel/DepartmentManage.aspx?DepartmentID={0}") %>' Text='<%# Eval("Department") %>'>
                </asp:HyperLink>
                &nbsp;|&nbsp;
                <asp:HyperLink ID="TaskListChiefIDLink" runat="server" NavigateUrl='<%# Eval("ChiefID", "~/ControlPanel/DepartmentManage.aspx?UserID={0}") %>' Text='<%# Eval("Chief") %>'>
                </asp:HyperLink>
                &nbsp;|&nbsp;
                <asp:HyperLink ID="TaskListProjectIDLink" runat="server" NavigateUrl='<%# Eval("ProjectID", "~/ControlPanel/ProjectManage.aspx?ProjectID={0}") %>' Text='<%# Eval("Project") %>'>
                </asp:HyperLink>
                &nbsp;|&nbsp;
                <asp:HyperLink ID="TaskListProjectAreaIDLink" runat="server" NavigateUrl='<%# Eval("ProjectAreaID", "~/ControlPanel/ProjectManage.aspx?ProjectAreaID={0}") %>' Text='<%# Eval("ProjectArea") %>'>
                </asp:HyperLink>
                <%--&nbsp;|&nbsp;
                <asp:HyperLink ID="TaskListParentIDLink" runat="server" NavigateUrl='<%# Eval("ParentID", "~/TaskDetail.aspx?TaskID={0}") %>' Text='<%# Eval("Parent.TaskName") %>'>
                </asp:HyperLink>--%>
                &nbsp;|&nbsp;
                <asp:Label ID="TaskListPlanStartDatePlanEndDateLabel" runat="server" Text='<%# "(" + Eval("PlanStartDate", "{0:yyyy-MM-dd}") + "~" + Eval("PlanEndDate", "{0:yyyy-MM-dd}") + ")" %>'></asp:Label>
              </div>
              <div class="DataListVersion">
                <%= Resources.Resource.Creator + ":"%>
                <asp:Label ID="CreatorLabel" runat="server" Text='<%# Eval("Creator") %>'></asp:Label>
                <asp:Label ID="CreatedDateLabel" runat="server" Text='<%# Eval("CreatedDate", "{0:yyyy-MM-dd hh:mm:ss}") %>'></asp:Label>
                &nbsp;|&nbsp;
                <%= Resources.Resource.Changer + ":"%>
                <asp:Label ID="ChangerLabel" runat="server" Text='<%# Eval("Changer") %>'></asp:Label>
                <asp:Label ID="ChangedDateLabel" runat="server" Text='<%# Eval("ChangedDate", "{0:yyyy-MM-dd hh:mm:ss}") %>'></asp:Label>
              </div>
            </div>
          </ItemTemplate>
        </asp:DataList>
        <asp:ObjectDataSource ID="TaskListDataSource" runat="server" DataObjectTypeName="AIO.WITDB.WITDataObject" SelectMethod="ReadPagedAndSorted" TypeName="AIO.WITDB.WITDataObject">
          <SelectParameters>
            <asp:ControlParameter ControlID="TaskFiltProjectList" Name="projectID" PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="TaskFiltProjectAreaTextBox" Name="projectAreaID" PropertyName="Value" />
            <asp:ControlParameter ControlID="TaskFiltDepartmentTextbox" Name="departmentID" PropertyName="Value" />
            <asp:ControlParameter ControlID="TaskFiltChiefList" Name="ChiefID" PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="TaskFiltStateSelectOptionDropDownList" Name="state" PropertyName="SelectOptionItem" Type="String" />
            <asp:ControlParameter ControlID="TaskFiltPrioritySelectOptionDropDownList" Name="priority" PropertyName="SelectOptionItem" Type="String" />
            <asp:ControlParameter ControlID="TaskFiltTriageSelectOptionDropDownList" Name="triage" PropertyName="SelectOptionItem" Type="String" />
            <asp:ControlParameter ControlID="TaskFiltPlanStartDateFDateTextBox" Name="planStartDateF" PropertyName="Text" Type="DateTime" />
            <asp:ControlParameter ControlID="TaskFiltPlanStartDateLDateTextBox" Name="planStartDateL" PropertyName="Text" Type="DateTime" />
            <asp:ControlParameter ControlID="TaskFiltPlanEndDateFDateTextBox" Name="planEndDateF" PropertyName="Text" Type="DateTime" />
            <asp:ControlParameter ControlID="TaskFiltPlanEndDateLDateTextBox" Name="planEndDateL" PropertyName="Text" Type="DateTime" />
            <asp:ControlParameter ControlID="TaskFiltCompletedDateFDateTextBox" Name="completedDateF" PropertyName="Text" Type="DateTime" />
            <asp:ControlParameter ControlID="TaskFiltCompletedDateLDateTextBox" Name="completedDateL" PropertyName="Text" Type="DateTime" />
            <asp:Parameter ConvertEmptyStringToNull="True" DefaultValue="" Name="sortExpression" Type="String" />
            <asp:Parameter ConvertEmptyStringToNull="True" DefaultValue="0" Name="startRowIndex" />
            <asp:Parameter ConvertEmptyStringToNull="True" DefaultValue="20" Name="maximumRows" />
          </SelectParameters>
        </asp:ObjectDataSource>
      </ContentTemplate>
    </atlas:UpdatePanel>

        本来系统采用BLinq实现、因为有复杂的逻辑关系、在业务层联合会产生大量的查询语句(大概200~200个)、现在采用存储过程调用动态SQL效率大大提高了。希望会对朋友有所帮助和借鉴
http://www.cnblogs.com/Bolik/archive/2006/08/24/485647.html


上一篇:SQL Server安装文件挂起错误解决办法 人气:18108
下一篇:用SQL Server Everywhere保存离线数据 人气:4413
点击此处浏览全部存储过程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-15 bBlog v0.7.6
2008-5-15 team论坛 v2.0.3 SQL
2008-5-15 team论坛 v2.0.3 ACC
2008-5-15 速博交友网站管理系统 2007 SQL专
2008-5-15 目录直读式图片展示系统 v2.0
2008-5-15 迅思科量具计量管理软件 MTMS v1
2008-5-15 图看网IP地址查询系统 v1.0
2008-5-15 幸福公寓同居交友 简洁版
2008-5-15 九天备案中系统
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報