ROW_NUMBER関数の戻り値

SQL SERVERで行数を引っ張ってくる関数として、ROW_NUMBERというものがある。

結果セットのパーティション内の行について、各パーティションの最初の行を 1 とした連続する数値を返します。

Transact-SQL 構文表記規則

構文

ROW_NUMBER ( ) OVER ( [ ] ) 引数

FROM 句で生成された結果セットを、ROW_NUMBER 関数が適用されるパーティションに分割します。PARTITION BY の構文については、「OVER 句 (Transact-SQL)」を参照してください。


ROW_NUMBER 値がパーティション内の行に割り当てられる順序を決定します。詳細については、「ORDER BY 句 (Transact-SQL)」を参照してください。 が順位付け関数で使用される場合、整数値で列を表すことはできません。

戻り値の型
bigint

...

http://msdn.microsoft.com/ja-jp/library/ms186734.aspx

まだSQLに関しては読める程度のレベルなのでヘルプを見つつ、
事故対応をしている今日この頃。
運用中のシステムのログ中に、
主キー重複エラーによる実行エラー*1が起きていた。
さっそく調査を開始。手順的には、

  1. DBから値を引く
  2. それを一時テーブルに入れる
  3. アプリからその一時テーブルを取得

というもの。
アプリからコードを追っていくと・・
行き着いたのが『ROW_NUMBERがNULLを返している』なのだが、
その返る条件が分からなかった。
ヘルプを見ると、戻りは『bigint型*2』とだけで
NULLを返すなんてどこにも書いてない。
行数の付加条件でOVER句を使ってORDERするのだが、
もしかしたらこのORDER部分がNULLになれば・・と期待し、
試しにあるテーブルAと検索関数をLEFT OUTER JOINし、
検索関数の戻りを0件にして実験したものの、ちゃんと付加しちゃった。


こーなるとお手上げなので、
素直に『分かりません』といっちゃった♪
でも、ちょっと悔しいので帰宅してせっせとGoogleしてみるものの、
それらしいのが出ない(google:ROW_NUMBER 戻り NULL)
う〜ん、検索の仕方がダメなのかな?

SP3も含めて

Windows Updateをかけて、
色々な更新を入れたところなんかフォントが微妙に変わった。
でもフレームのタイトル部分はなんか・・あまり気持ちよくないな。
にじんでるというか、ブニュとマッキーで書いた感じで。
IEも7になり、流行の*3タブブラウザであるが、
どうもIE7は閉じる時に微妙に固まる気がする*4


PCの発熱といい、色々と変え時が来ているのかもしれない。

*1:あまり見たくないダイアログ

*2:Integerより大きい型

*3:

*4:やっぱり流行のFireFox?3も出たし