在论坛回答问题时,发现测试脚本会出现如下问题,百思不得其解。
set
nocount
on
create
table
test(a
varchar
(
10
))
insert
into
test
select
'
a
'
insert
into
test
select
'
b
'

declare
@str1
varchar
(
8000
)
declare
@str2
varchar
(
8000
)
set
@str1
=
''
set
@str2
=
''

select
@str1
=
@str1
+
a
from
test
order
by
a
print
@str1
--
返回ab
select
@str2
=
@str2
+
a
from
test
order
by
case
a
when
'
a
'
then
1
when
'
b
'
then
2
else
99
end

print
@str2
--
返回b
drop
table
test
set
nocount
off
上面的@str2会丢失前面的所有记录,只保留order by的最后一条-_-||
set
nocount
on
create
table
test(a
varchar
(
10
))
insert
into
test
select
'
a
'
insert
into
test
select
'
b
'

declare
@str1
varchar
(
8000
)
declare
@str2
varchar
(
8000
)
set
@str1
=
''
set
@str2
=
''

select
@str1
=
@str1
+
a
from
test
order
by
a
print
@str1
--
返回ab
select
@str2
=
@str2
+
a
from
test
order
by
case
a
when
'
a
'
then
1
when
'
b
'
then
2
else
99
end

print
@str2
--
返回b
drop
table
test
set
nocount
off
上面的@str2会丢失前面的所有记录,只保留order by的最后一条-_-||
SQL ORDER BY 异常案例
本文探讨了一个关于 SQL 查询中使用 ORDER BY 和 CASE WHEN 结合字符串拼接时出现的异常现象。通过一个具体的示例代码,展示了如何设置变量并进行字符串拼接,最终发现仅保留了 ORDER BY 的最后一个结果。
582

被折叠的 条评论
为什么被折叠?



