参数化Sql顺序

时间:2017-07-12 13:25:30

标签: sql sql-server

我想对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项包含一个变量,作为标识列位置的表达式的一部分。只有在引用列名的表达式进行排序时,才允许使用变量。

什么是建议? 感谢。

1 个答案:

答案 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组件应负责对结果集进行排序。