<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
问题描述:
使用 SELECT 语句,轮询表中的数据,并且处理变量数据时,如果有ORDER BY语句,则得不到想要的结果,但去掉ORDER BY,结果正常。
具体的问题表现参考下面的问题重现代码
-- 测试数据
DECLARE @T TABLE(id int,value nvarchar(16))
INSERT INTO @T SELECT
1, N'好人' UNION ALL SELECT
2, N'坏人' UNION ALL SELECT
3, N'吃饭' UNION ALL SELECT
4, N'垃圾'
-- 赋值处理
DECLARE @str nvarchar(4000)
SET @str = N'我不是一个好人,也不是垃圾'
SELECT @str = REPLACE(@str, value, N'' + value + N'')
FROM @T
WHERE CHARINDEX(value, @str) > 0
--ORDER BY CHARINDEX(value, @str) DESC
SELECT @str
/* -- 结果(当赋值处理语句注释掉ORDER BY 时)
我不是一个好人,也不是垃圾
-- */
/* -- 结果(当赋值处理语句加上ORDER BY 时)
我不是一个好人,也不是垃圾
-- */
两个处理语句的结果不同,通过查看它们的执行计划应该可以看出原因所在,为此,通过
SET SHOWPLAN_ALL ON
输出了两种执行语句的执行计划(仅StmtText部分,有兴趣的读者在自己的电脑上测试的时候,可以去了解其他部分的信息)
| |
DECLARE @str nvarchar(4000) SET @str = N'我不是一个好人,也不是垃圾' | |
SELECT @str = REPLACE(@str, value, N'' + value + N'') FROM @T WHERE CHARINDEX(value, @str) > 0 | |
| | Compute Scalar(DEFINE:([Expr1002]=replace([@str], @T.[value], ''+@T.[value]+''))) | |
| | | Filter(WHERE:(charindex(@T.[value], [@str], NULL)>0)) | |
| | | | | |
| | | | | | |
DECLARE @str nvarchar(4000) SET @str = N'我不是一个好人,也不是垃圾' | |
SELECT @str = REPLACE(@str, value, N'' + value + N'') FROM @T WHERE CHARINDEX(value, @str) > 0 ORDER BY CHARINDEX(value, @str) DESC | |
| | Sort(ORDER BY:([Expr1003] DESC)) | |
| | | Compute Scalar(DEFINE:([Expr1002]=replace([@str], @T.[value], ''+@T.[value]+''), [Expr1003]=charindex(@T.[value], [@str], NULL))) | |
| | | | Filter(WHERE:(charindex(@T.[value], [@str], NULL)>0)) | |
| | | border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; margin: 0cm 0cm 0pt; border-left: medium none; padding-top: 0cm
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
- 示例:`var sortedProducts = from p in Products where p.IsAvailable orderby p.Price descending select p;` - **降序排序** - 示例:`var sortedProducts = from p in Products orderby p.Price descending ...
orderby p.Category, p.Price descending select p; ``` 首先按类别排序,然后按价格降序排序。 **6. 带 GroupBy 形式** ```csharp var query = from p in db.Products group p by p.Category into g orderby...
ORDER BY C. WHERE D. GROUP BY 11. 查询一个表的总记录数,可以采用_________统计函数。( C ) A. AVG(*) B. SUM(*) C. COUNT(*) D.MAX(*) 12. 要建立一个语句向Types表中插入数据,这个表只有两列,T_ID和T_...
创建视图或使用ORDER BY子句时,语法错误会导致此类问题。 15. **-11042606 - 数学运算溢出** 执行数学运算时,结果超出了可表示的范围,如整数溢出。 16. **-11142901 - 非法字符** 输入的字符串包含非法字符...
### Set和Select赋值区别 SET用于为变量赋值,而SELECT用于从结果集中选择数据。在SQL Server中,通常使用SET给局部变量赋值,使用SELECT将数据查询结果赋值给变量。 ### 完整的对象名称由四个标识符组成 在SQL ...
- **-12542805**:ORDER BY子句中列名不存在,可能是在排序操作中指定的列名与表结构不匹配。 通过以上对DB2异常SQLCODE信息的详述,可以更准确地理解每种错误代码背后的原因,从而有效地进行问题定位和解决。在...
认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程...
- **-12242803**:GROUP BY子句中未包含所有SELECT列表中的列。 - **-12342601**:对象名称或引用不存在。 - **-12542805**:表达式中使用的函数或操作符不正确。 以上列举的是一些常见的DB2异常情况及其解释。了解...
还可以使用聚合函数(如COUNT、SUM、AVG等),分组(GROUP BY)、排序(ORDER BY)、连接(JOIN)和其他复杂查询结构。 4. **其他知识点** - **行级锁**:在执行DML语句时,Oracle会自动加上行级锁,防止并发冲突...
频繁使用`ORDER BY`和`GROUP BY`会导致性能下降,特别是在没有适当索引支持的情况下。如果必须使用排序或分组操作,尽量建立在已有的索引列上。 **11. 避免使用NOT或!=** 对于索引列的比较,尽量避免使用`NOT`或`!...
但请注意,`ORDER BY`和`LIMIT`不能与多表UPDATE同时使用。 权限方面,对于被更新的列,你需要UPDATE权限,而对于仅被读取的列,你需要SELECT权限。在多表更新中,表的更新顺序可能因优化器而异,特别是涉及到...
1. **SQL语言**:熟练编写SELECT, INSERT, UPDATE, DELETE语句,理解JOIN, GROUP BY, HAVING, ORDER BY等子句。 2. **数据库设计**:理解数据库范式,能进行数据库表结构设计。 3. **索引**:知道索引的作用,B树...
- 成绩最高的学生号:`SELECT sno FROM sc GROUP BY sno ORDER BY grade DESC LIMIT 1` - 每科大于90分的人数:`SELECT COUNT(*) FROM sc WHERE grade > 90` 这些题目的解答涵盖了C++基础语法、数据结构、算法、...
也可以使用"ORDER BY"进行排序,"GROUP BY"进行分组统计。 7. 数据库游标:在易语言中,为了遍历查询结果,通常会用到数据库游标。游标允许程序逐行访问结果集,向前或向后移动,甚至可以修改当前行数据。 8. 关闭...
需要注意的是,`ORDER BY`和`LIMIT`不能与多表`UPDATE`同时使用。在涉及InnoDB表的多表`UPDATE`中,如果有外键约束,优化器可能会按非预期的顺序处理表,导致语句无效并回滚。同时,`ON UPDATE`功能允许InnoDB表与...