2017-07-12 79 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

這是您的變量,我跳過它在第一,但它添加爲清楚起見 –