去评论
随县网_随县论坛_随州随县论坛网

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

┽→踏雪无痕╰
2012/05/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部分,有兴趣的读者在自己的电脑上测试的时候,可以去了解其他部分的信息)
家装活动