-3

SQL Server で次の SQL コマンドを実行しようとしています。

   select a1, 
           a2,
    ....
            (select [dbo].[myFunction](a1, a2)) as mySelector
    where mySelector = @sel    

エラーメッセージは次のとおりです:無効な列名mySelector

「「mySelector」として」も試しました-同じエラーメッセージ

理由はありますか?

ありがとう、

zb

4

1 に答える 1

3

関数の結果をフィルタリングしてエイリアスを使用する必要がある場合は、サブクエリの使用を検討する必要があります。

select a1, a2, mySelector
from
(
   select a1, 
           a2,
    ....
            (select [dbo].[myFunction](a1, a2)) as mySelector
   from yourtable
) d
where mySelector = @sel;

SELECT リストで使用しているエイリアスは、WHERE 句では使用できません。MSDNから: SELECT ステートメントの論理処理順序:

次の手順は、SELECT ステートメントの論理的な処理順序 (バインド順序) を示しています。この順序により、あるステップで定義されたオブジェクトが後続のステップの句でいつ使用可能になるかが決まります。たとえば、クエリ プロセッサが FROM 句で定義されたテーブルまたはビューにバインド (アクセス) できる場合、これらのオブジェクトとその列は、後続のすべてのステップで使用できるようになります。逆に、SELECT 句は手順 8 であるため、その句で定義された列の別名または派生列は、前の句で参照できません。ただし、ORDER BY 句などの後続の句で参照できます。ステートメントの実際の物理的な実行はクエリ プロセッサによって決定され、順序はこのリストと異なる場合があることに注意してください。

  1. から
  2. オン
  3. 加入
  4. どこ
  5. グループ化
  6. WITH CUBE または WITH ROLLUP
  7. 持っている
  8. 選択する
  9. 明確
  10. オーダーバイ
于 2013-10-29T20:41:06.010 に答える