ScriptDom を使って、SELECT で取得しているカラム名を取得するサイト作ったった

T-SQL の パーサーとジェネレーター(ScriptDom)の紹介 - お だ のスペース で紹介した、ScriptDom Sample を隣の人に見せたら、SELECT の列名(エイリアス着けた場合は、エイリアスで)一覧抜き出せないのって聞かれたからやっつけで追加したった。*1
ScriptDom Sample ColumnName
なんか DTO とか作る時に便利なるかもらしい。(実装の紹介はまた今度)


T-SQL のパーサーだけど、ORACLE の組込関数(NVL とか)が入ったクエリもエラーは出ません。
考えてみれば普通の関数の呼び出しの構文ですし、オブジェクトの存在有無はチェックしないので他DBの組込関数とか関係無いですね。
ただ、特殊な構文は流石にダメでした。(START WITH や CONNECT BY など)


Oracle の 話しが出たついでにちょっと紹介。

select 
  Col1 
  , Col2 
  , Col3
  ~
  . ColN 
  , ColM  
  ~ 
from 
  Table_1 
where 
  ~

みたいなクエリで、ColN の前が "," ではなく、"." になっていたというミスをした場合、Oracle のエラーは、

ORA-00923: FROMキーワードが指定の位置にありません。

となります。
ここから、どこが悪いのか探していくのは短いクエリなら大したことないですが長いと大変!
これを ScriptDom にパースさせると…

行:N M文字目 Incorrect syntax near ..

と行番号と文字位置まで教えてくれます。SQL Server 便利〜!
ということで、ScriptDomSample の TextArea に行番号をつけてみました。


行番号を付けるのに参考にしたサイトはこちら
最速インターフェース研究会 :: 編集インターフェースを考える

*1:やっつけなので、サブクエリ内の列名も取得する