5

select ステートメントで行 ID を取得する必要があります。oracle の行 ID に似たもの。Teradata でそれを行うにはどうすればよいでしょうか。次のクエリを試していますが、エラーがスローされます。

select rowid,emp_id,e_name from test;

Error msg : Syntax error: ROWID not allowed.

前もって感謝します。

4

1 に答える 1

3

ROW_NUMBER()ウィンドウ集計関数を試してください。

SELECT ROW_NUMBER() OVER(ORDER BY empid) AS RowID_
     , empid
     , empName
  FROM test;

ウィンドウアグリゲートとは異なりRANK()、結果セットでタイが発生することはできません。ROW_NUMBER()他の選択肢はIDENTITY、テーブルの列を使用することですが、それらは厄介で、将来的に問題を引き起こします。ROW_NUMBER()代理キーを維持する必要がある場合は、ETL処理に組み込む方が簡単です。

ORDER BYまたはPARTITION BY列が歪んでいる場合STAT FUNCTION、クエリプランのステップでのパフォーマンスは、大量のデータセットに対して影響を受けることに注意してください。このPARTITION BY句はオプションでありROW_NUMBER()、パーティションが変更されたときに結果がリセットされるウィンドウを定義できます。一般的には使用されませんROW_NUMBER()が、便利な場合があります。

編集 サロゲートを使用してレコードを一意に識別し、テーブルのETL使用およびID列のロジックに依存する必要がないようにします。正しく構成されている場合、IDENTITY列は、レコードが削除されたときにドメイン値を再利用しません。

于 2013-01-23T13:25:54.410 に答える