查看: 2008|回复: 1
收起左侧

数据库 >> SELECT 赋值与ORDER BY冲突的问题

[复制链接]
发表于 2012-5-14 10:30:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转随县论坛。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
问题描述:
  使用 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<u> + value + N</u>)
FROM @T
WHERE CHARINDEX(value, @str) > 0
--ORDER BY CHARINDEX(value, @str) DESC
SELECT @str

/* -- 结果(当赋值处理语句注释掉ORDER BY 时)
我不是一个<u>好人</u>,也不是<u>垃圾</u>
-- */

/* -- 结果(当赋值处理语句加上ORDER BY 时)
我不是一个<u>好人</u>,也不是垃圾
-- */

  问题分析:
  两个处理语句的结果不同,通过查看它们的执行计划应该可以看出原因所在,为此,通过
SET SHOWPLAN_ALL ON
  输出了两种执行语句的执行计划(仅StmtText部分,有兴趣的读者在自己的电脑上测试的时候,可以去了解其他部分的信息)
发表于 2013-11-24 18:33:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

快速入职
隐私保护
薪资透明
信息可靠
手机找工作

快速回复 返回顶部 返回列表