很经常我们都要在sql中拼凑字符串,如果需要的评凑的目标字符串的来源都已经在一个表中,那很简单,我们只要写个类似的语句,就可以搞定。
declare  @Va1 varchar(500);
set @Va1='';
select @Va1=@Va1+',['+ColumnName+']' 
from
ItemColumn
where year=2008
and month=1
order by SortID desc
print @Va1
比如输出为:,[总分],[主题检测],[常规检测],[扣分项],[总体评价],[无推诿],[环境设施],[业务能力],[服务规范]

但是如果我们的数据来源是一个子查询,情况会怎么样呢?
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量declare @str varchar(500)
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
set @str=''
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
--以下写法,会报错
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
select @str=@str+Value+';'
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
from
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量(
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
select Value,[Order] from dbo.SMS_SpecialConfigData data
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
join  dbo.SMS_Config co
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
on co.ItemID=data.ConfigID
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
where Time='2008-5-12' and OrgCode='GZ/'
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
order by [Order]
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量)
temp
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
--或如下,但又得不到我们想要的结果
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
select @str=@str+Value+';'
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
from
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量(
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
select Value,[Order] from dbo.SMS_SpecialConfigData data
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
join  dbo.SMS_Config co
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
on co.ItemID=data.ConfigID
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    
where Time='2008-5-12' and OrgCode='GZ/'
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量)
temp
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
order by [Order]
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
上面的第一个sql,执行会报错,错误如下:
Msg 1033, Level 15, State 1, Line 12
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。


上面的第二个sql,得到的结果有不是我们想要的。

难道我们就束手待毙?不,我们还有表变量。
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量declare @t table
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量(
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量    strs 
varchar(200)
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量)
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
declare @str varchar(500)
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
set @str=''
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
insert into @t
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
select Value from dbo.SMS_SpecialConfigData data
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
join  dbo.SMS_Config co
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
on co.ItemID=data.ConfigID
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
where Time='2008-5-12' and OrgCode='GZ/'
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
order by [Order]
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
select @str=@str+strs+';'
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
from @t
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法--使用表变量
print @str

ok,讨厌的1033错误消失了,我们要的结果也拿到了。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2021-08-12
  • 2021-08-29
  • 2021-10-02
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-16
  • 2021-12-08
  • 2021-10-28
相关资源
相似解决方案