2017-07-12 49 views
1

我想参数化排序SQL语句。 SQL语句: 申报@sxPaletNo VARCHAR(10) 集@sxPaletNo = 'pd.PaletNo'参数化Sql命令

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 

我收到以下错误: 消息1008,级别16,状态1,行18 的SELECT由ORDER BY编号1标识的项目包含一个变量,作为标识列位置的表达式的一部分。只有在引用列名称的表达式进行排序时,才允许使用变量。

什么是建议? 谢谢。

+0

数据库名称? –

+0

从错误消息格式猜测SQL Server –

+0

我的数据库是DFSEMUS –

回答

2

你不能在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组件应该负责排序结果集。

+0

但我的SQL语句:声明sxPaletNo varchar(10)set @sxPaletNo ='pd.PaletNo'开始。 –

+0

什么是@sxPaletNo? –

+0

这是您的变量,我跳过它在第一,但它添加为清楚起见 –