我想对SQL语句进行参数化排序。 SQL语句: 声明@sxPaletNo varchar(10) 设置@sxPaletNo ='pd.PaletNo'
select
pd.PaletNo PalletNo
,isNull(cs.KaplamaIng, 'No') Type
,convert(decimal(10,2),(sum(Alan))) sqm
from PaletDetay pd
left join paletsevk ps on pd.PaletNo=ps.SevkPaletNo
left Join Cins cs on pd.mTomrukCinsiKod=cs.EskiKod
where
pd.YeniPaletNo is Null
and
ps.SevkPaletNo is null
Group By
pd.PaletNo
,cs.KaplamaIng
Order By @sxPaletNo
我收到以下错误: Msg 1008,Level 16,State 1,Line 18 由ORDER BY编号1标识的SELECT项包含一个变量,作为标识列位置的表达式的一部分。只有在引用列名的表达式进行排序时,才允许使用变量。
什么是建议? 感谢。
答案 0 :(得分:1)
在SQL中不能这样做,因为参数不是为了替换列名而设计的。
你可以:
动态SQL ,假设@sxPaletNo始终具有有效值:
DECLARE @sxPaletNo varchar(10);
SET @sxPaletNo = 'pd.PaletNo';
DECLARE @sql VARCHAR(MAX);
SET @sql = CONCAT('select
pd.PaletNo PalletNo
,isNull(cs.KaplamaIng, 'No') Type
,convert(decimal(10,2),(sum(Alan))) sqm
from PaletDetay pd
left join paletsevk ps on pd.PaletNo=ps.SevkPaletNo
left Join Cins cs on pd.mTomrukCinsiKod=cs.EskiKod
where
pd.YeniPaletNo is Null
and
ps.SevkPaletNo is null
Group By
pd.PaletNo
,cs.KaplamaIng
Order By ', @sxPaletNo);
EXEC @sql;
然而,这是最后的手段,请在此处阅读原因:http://www.sommarskog.se/dynamic_sql.html
对表示层中的数据进行排序这是推荐的行为,这意味着您的GUI组件应负责对结果集进行排序。