真TMD爽,第一次找到复杂SQL的错误

2024-04-12 13:48

本文主要是介绍真TMD爽,第一次找到复杂SQL的错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以前用的ASPNetPager的存储过程今天突然错了,郁闷啊!

因为以前只是用,今天第一次研究。。。。

哈哈!居然让我找到了错误所在。。。 嘿嘿

越来越强烈的体会到procdeure的强大!

Alter PROCEDURE dbo.Code_SYS_PackSqlInPage
(
 @tblName varchar(255), -- 表名
 @strGetFields varchar(1000) = '*', -- 需要返回的列
 @fldName varchar(255)='', -- 排序的字段名
 @PageSize int = 10, -- 页尺寸
 @PageIndex int = '', -- 页码
 @OrderType bit = '', -- 设置排序类型, 非 0 值则降序
 @strWhere varchar(8000) = '' -- 查询条件 (注意: 不要加 where)
)
AS
BEGIN
declare @strSQLCount  nvarchar(4000) -- 主语句
declare @strSQL  nvarchar(4000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
declare @sCRLF char(2)
declare @sTAB char(1)
SET @sTAB = char(9)
SET  @sCRLF = char(13) + char(10)
if @strWhere !=''
set @strSQLCount = 'select count(1) as Total from ' + (@tblName) + @sCRLF+'where 1 = 1'+@sCRLF+@strWhere
else
set @strSQLCount = 'select count(1) as Total from ' + (@tblName)
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
if @OrderType = 0
BEGIN
 set @strTmp = '<'+@sCRLF+'('+@sCRLF+@sTAB+'select min'
 set @strOrder = 'order by ' + (@fldName)
 --如果@OrderType不是0,就执行降序,这句很重要!
END
else
BEGIN
 set @strTmp = '>'+@sCRLF+'('+@sCRLF+@sTAB+'select max'
 set @strOrder = 'order by ' + (@fldName) +' asc'
END
if @PageIndex = 1
BEGIN
if @strWhere != ''
 set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields +@sCRLF+ ' from ' + (@tblName) + ' where  1 = 1 ' + @sCRLF + @strWhere
 + @sCRLF + @strOrder
 else
 set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields +@sCRLF+ ' from '+ (@tblName) + ' '
 + @sCRLF + @strOrder
 --如果是第一页就执行以上代码,这样会加快执行速度
END
else
BEGIN
 --以下代码赋予了@strSQL以真正执行的SQL代码
 set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+@sCRLF+ 'from '
 + (@tblName)+@sCRLF+'where ' + (@fldName) + @strTmp +'('+ (@fldName) + ') from '+@sCRLF+@sTAB
 +'('+@sCRLF+@sTAB+@sTAB
 +'select top ' + str((@PageIndex-1)*@PageSize) + ' '+ (@fldName) + ' from ' + (@tblName)
 
 if (len(@strWhere)>0)
  set @strSQL = @strSQL + ' where  1 = 1 ' + @sCRLF + @strWhere + ' '
 
-- select @strSQL as SQLCommand1
 set @strSQL = @strSQL+@sCRLF+@strOrder+@sCRLF+@sTAB
-- set @strSQL = @strSQL+@sCRLF+@sTAB
 + ')'+' as tblTmp'+@sCRLF
 +')'
 if (len(@strWhere)>0)
  set @strSQL = @strSQL + @sCRLF + @strWhere +@sCRLF
 set @strSQL = @strSQL + @strOrder
-- select @strSQL as SQLCommand
END
 exec(@strSQL)
 exec(@strSQLCount)
END

GO

这篇关于真TMD爽,第一次找到复杂SQL的错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897308

相关文章

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的