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

エラーメッセージフォーマット –

+0

からSQL Serverを推測する私のデータベースはDFSEMUS –

答えて

2

パラメータが列名を置き換えるように設計されていないため、SQLでこのようにすることはできません。

は、あなたがすることができます:@sxPaletNoを想定し

動的SQLは常に有効な値があります:

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ステートメント:Declare sxPaletNo varchar(10)は@sxPaletNo = 'pd.PaletNo'を開始して設定します。 –

+0

@sxPaletNoとは何ですか? –

+0

これは変数ですが、最初はスキップしましたが、わかりやすくするために追加しました –