zoukankan      html  css  js  c++  java
  • 构造获取分页操作SQL语句

    构造获取分页操作SQL语句

            /// <summary>
            /// 获取分页操作SQL语句(对于排序的字段必须建立索引,优化分页提取方式)
            /// </summary>
            /// <param name="tblName">操作表名称</param>
            /// <param name="fldName">排序的索引字段</param>
            /// <param name="PageIndex">当前页</param>
            /// <param name="PageSize">每页显示记录数</param>
            /// <param name="totalRecord">总记录数</param>
            /// <param name="OrderType">排序方式(0升序,1为降序)</param>
            /// <param name="strWhere">检索的条件语句,不需要再加WHERE关键字</param>
            /// <returns></returns>
            public static string ConstructSplitSQL(string tblName,
                                                    string fldName,
                                                    int PageIndex,
                                                    int PageSize,
                                                    int totalRecord,
                                                    int OrderType,
                                                    string strWhere)
            {
                string strSQL = "";
                string strOldWhere = "";
                string rtnFields = "*";

                // 构造检索条件语句字符串
                if (strWhere != "")
                {
                    // 去除不合法的字符,防止SQL注入式攻击
                    strWhere = strWhere.Replace("'", "''");
                    strWhere = strWhere.Replace("--", "");
                    strWhere = strWhere.Replace(";", "");

                    strOldWhere = " AND " + strWhere + " ";

                    strWhere = " WHERE " + strWhere + " ";
                }

                // 升序操作
                if (OrderType == 0)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        //strSQL += "WHERE (" + fldName + " >= ( SELECT MAX(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                        strSQL += strWhere + "ORDER BY " + fldName + " ASC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " > ( SELECT MAX(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                    }
                }
                // 降序操作
                else if (OrderType == 1)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        //strSQL += "WHERE (" + fldName + " <= ( SELECT MIN(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                        strSQL += strWhere + "ORDER BY " + fldName + " DESC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " < ( SELECT MIN(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                    }
                }
                else // 异常处理
                {
                    throw new DataException("未指定任何排序类型。0升序,1为降序");
                }

                return strSQL;
            }


            /// <summary>
            /// 获取分页操作SQL语句(对于排序的字段必须建立索引)
            /// </summary>
            /// <param name="tblName">操作表名</param>
            /// <param name="fldName">操作索引字段名称</param>
            /// <param name="PageIndex">当前页</param>
            /// <param name="PageSize">每页显示记录数</param>
            /// <param name="rtnFields">返回字段集合,中间用逗号格开。返回全部用“*”</param>
            /// <param name="OrderType">排序方式(0升序,1为降序)</param>
            /// <param name="strWhere">检索的条件语句,不需要再加WHERE关键字</param>
            /// <returns></returns>
            public static string ConstructSplitSQL(string tblName,
                                                    string fldName,
                                                    int PageIndex,
                                                    int PageSize,
                                                    string rtnFields,
                                                    int OrderType,
                                                    string strWhere)
            {
                string strSQL = "";
                string strOldWhere = "";

                // 构造检索条件语句字符串
                if (strWhere != "")
                {
                    // 去除不合法的字符,防止SQL注入式攻击
                    strWhere = strWhere.Replace("'", "''");
                    strWhere = strWhere.Replace("--", "");
                    strWhere = strWhere.Replace(";", "");

                    strOldWhere = " AND " + strWhere + " ";

                    strWhere = " WHERE " + strWhere + " ";
                }

                // 升序操作
                if (OrderType == 0)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        //strSQL += "WHERE (" + fldName + " >= ( SELECT MAX(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                        strSQL += strWhere + "ORDER BY " + fldName + " ASC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " > ( SELECT MAX(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                    }
                }
                // 降序操作
                else if (OrderType == 1)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        //strSQL += "WHERE (" + fldName + " <= ( SELECT MIN(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                        strSQL += strWhere + "ORDER BY " + fldName + " DESC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " < ( SELECT MIN(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                    }
                }
                else // 异常处理
                {
                    throw new DataException("未指定任何排序类型。0升序,1为降序");
                }

                return strSQL;
            }


            /// <summary>
            /// 获取分页操作SQL语句(对于排序的字段必须建立索引)
            /// </summary>
            /// <param name="tblName">操作表名</param>
            /// <param name="fldName">操作索引字段名称</param>
            /// <param name="unionCondition">用于连接的条件,例如: LEFT JOIN UserInfo u ON (u.UserID = b.UserID)</param>
            /// <param name="PageIndex">当前页</param>
            /// <param name="PageSize">每页显示记录数</param>
            /// <param name="rtnFields">返回字段集合,中间用逗号格开。返回全部用“*”</param>
            /// <param name="OrderType">排序方式,0升序,1为降序</param>
            /// <param name="strWhere">检索的条件语句,不需要再加WHERE关键字</param>
            /// <returns></returns>
            public static string ConstructSplitSQL(string tblName,
                string fldName,
                string unionCondition,
                int PageIndex,
                int PageSize,
                string rtnFields,
                int OrderType,
                string strWhere)
            {
                string strSQL = "";
                string strOldWhere = "";

                // 构造检索条件语句字符串
                if (strWhere != "")
                {
                    // 去除不合法的字符,防止SQL注入式攻击
                    strWhere = strWhere.Replace("'", "''");
                    strWhere = strWhere.Replace("--", "");
                    strWhere = strWhere.Replace(";", "");

                    strOldWhere = " AND " + strWhere + " ";

                    strWhere = " WHERE " + strWhere + " ";
                }

                // 升序操作
                if (OrderType == 0)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + unionCondition + " ";

                        //strSQL += "WHERE (" + fldName + " >= ( SELECT MAX(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                        strSQL += strWhere + "ORDER BY " + fldName + " ASC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + unionCondition + " ";

                        strSQL += "WHERE (" + fldName + " > ( SELECT MAX(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                    }
                }
                // 降序操作
                else if (OrderType == 1)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + unionCondition + " ";

                        //strSQL += "WHERE (" + fldName + " <= ( SELECT MIN(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                        strSQL += strWhere + "ORDER BY " + fldName + " DESC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + unionCondition + " ";

                        strSQL += "WHERE (" + fldName + " < ( SELECT MIN(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                    }
                }
                else // 异常处理
                {
                    throw new DataException("未指定任何排序类型。0升序,1为降序");
                }

                return strSQL;
            }



     

            /// <summary>
            /// 获取分页操作SQL语句(对于排序的字段必须建立索引)
            /// </summary>
            /// <param name="tblName">操作表名</param>
            /// <param name="fldName">操作索引字段名称</param>
            /// <param name="PageIndex">当前页</param>
            /// <param name="PageSize">每页显示记录数</param>
            /// <param name="rtnFields">返回字段集合,中间用逗号格开。返回全部用“*”</param>
            /// <param name="OrderType">排序方式(0升序,1为降序)</param>
            /// <param name="strWhere">检索的条件语句,不需要再加WHERE关键字</param>
            /// <returns></returns>
            public static string ConstructSplitSQL_TOP(string tblName,
                                                        string fldName,
                                                        int PageIndex,
                                                        int PageSize,
                                                        string rtnFields,
                                                        int OrderType,
                                                        string strWhere)
            {
                string strSQL = "";
                string strOldWhere = "";

                // 构造检索条件语句字符串
                if (strWhere != "")
                {
                    // 去除不合法的字符,防止SQL注入式攻击
                    strWhere = strWhere.Replace("'", "''");
                    strWhere = strWhere.Replace("--", "");
                    strWhere = strWhere.Replace(";", "");

                    strOldWhere = " AND " + strWhere + " ";

                    strWhere = " WHERE " + strWhere + " ";
                }

                // 升序操作
                if (OrderType == 0)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += strWhere + " ORDER BY " + fldName + " ASC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " > ( SELECT MAX(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                    }
                }
                // 降序操作
                else if (OrderType == 1)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += strWhere + " ORDER BY " + fldName + " DESC";
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " < ( SELECT MIN(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                    }
                }
                else // 异常处理
                {
                    throw new DataException("未指定任何排序类型。0升序,1为降序");
                }

                return strSQL;
            }






            /// <summary>
            /// 获取分页操作SQL语句(对于排序的字段必须建立索引)
            /// </summary>
            /// <param name="tblName">操作表名</param>
            /// <param name="fldName">操作索引字段名称</param>
            /// <param name="PageIndex">当前页</param>
            /// <param name="PageSize">每页显示记录数</param>
            /// <param name="rtnFields">返回字段集合,中间用逗号格开。返回全部用“*”</param>
            /// <param name="OrderType">排序方式(0升序,1为降序)</param>
            /// <param name="sort">排序表达式</param>
            /// <param name="strWhere">检索的条件语句,不需要再加WHERE关键字</param>
            /// <returns></returns>
            public static string ConstructSplitSQL_sort(string tblName,
                string fldName,
                int PageIndex,
                int PageSize,
                string rtnFields,
                int OrderType,
                string sort,
                string strWhere)
            {
                string strSQL = "";
                string strOldWhere = "";

                // 构造检索条件语句字符串
                if (strWhere != "")
                {
                    // 去除不合法的字符,防止SQL注入式攻击
                    strWhere = strWhere.Replace("'", "''");
                    strWhere = strWhere.Replace("--", "");
                    strWhere = strWhere.Replace(";", "");

                    strOldWhere = " AND " + strWhere + " ";

                    strWhere = " WHERE " + strWhere + " ";
                }

                if (sort != "") sort = " ORDER BY " + sort;

                // 升序操作
                if (OrderType == 0)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        //strSQL += "WHERE (" + fldName + " >= ( SELECT MAX(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " ASC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " ASC";
                        strSQL += strWhere + sort;
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " > ( SELECT MAX(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + sort + " ) AS T )) ";

                        strSQL += strOldWhere + sort;
                    }
                }
                // 降序操作
                else if (OrderType == 1)
                {
                    if (PageIndex == 1)
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        //strSQL += "WHERE (" + fldName + " <= ( SELECT MIN(" + fldName + ") FROM (SELECT TOP 1 " + fldName + " FROM " + tblName + strWhere + " ORDER BY " + fldName + " DESC ) AS T )) ";

                        //strSQL += strOldWhere + "ORDER BY " + fldName + " DESC";
                        strSQL += strWhere + sort;
                    }
                    else
                    {
                        strSQL += "SELECT TOP " + PageSize + " " + rtnFields + " FROM " + tblName + " ";

                        strSQL += "WHERE (" + fldName + " < ( SELECT MIN(" + fldName + ") FROM (SELECT TOP " + ((PageIndex - 1) * PageSize) + " " + fldName + " FROM " + tblName + strWhere + sort + " ) AS T )) ";

                        strSQL += strOldWhere + sort;
                    }
                }
                else // 异常处理
                {
                    throw new DataException("未指定主索引排序类型。0升序,1为降序");
                }

                return strSQL;
            }
  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2238887.html
Copyright © 2011-2022 走看看