38

今日、SQL Server 2000 ボックスでテーブルに対するクエリを作成していました。クエリ アナライザでクエリを作成しているときに、驚いたことに単語LineNoが青いテキストに変換されていることに気付きました。

MSDN のドキュメントによると、予約語のようですが、それに関する情報は見つかりません。もしない従来の予約語である可能性があるという推測だけです。

フィールド名をエスケープするのに問題はありませんが、興味があります-T-SQLの「LineNo」が実際に何に使用されているか知っている人はいますか?

4

2 に答える 2

74

OK、これは完全に文書化されておらず、試行錯誤して把握する必要がありましたが、エラー報告の行番号を設定します。例えば:

LINENO 25

SELECT * FROM NON_EXISTENT_TABLE

上の例では、27 行目のエラーを示すエラー メッセージが表示されます (LINENO 行を 1 行のコメントに変換した場合 (たとえば、2 つのハイフンを前に付けることにより)、3 行目ではなく):

Msg 208, Level 16, State 1, Line 27
Invalid object name 'NON_EXISTENT_TABLE'.

これは、Visual C++ および Visual C# の #line プリプロセッサ ディレクティブ (ちなみにドキュメント化されています) など、プログラミング言語の同様のメカニズムに関連しています。

これはどのように役立つのでしょうか? これを使用すると、(SQL よりも) 高レベルの言語からコードを生成したり、マクロ展開を実行したりする SQL コード ジェネレーターが、生成されたコード行をユーザー コード行に結び付けることができます。

PS、特にデータベースを扱う場合は、文書化されていない機能に依存することはお勧めできません。

更新: この説明は、現在のバージョンの SQL Server (この記事の執筆時点では SQL Server 2008 R2 Cumulative Update 5 (10.50.1753.0)) までは正しいものです。

于 2010-10-29T18:01:48.257 に答える
-1

使う場所次第で、いつでも使えます[LineNo]。例えば:

select LnNo [LineNo] from OrderLines.
于 2018-07-17T15:22:28.577 に答える