2017-02-03 14 views
0

必要条件は、ストアドプロシージャから処理された行ごとに一意の値を返します。 1つの解決策は、ROW_NUMBER()関数を使用しているようです。もう1つはhereです。たぶん、Guidを含むソリューションがあるかもしれません。誰かが私にパフォーマンスと信頼性の高いソリューションをお勧めできますか? (あなたがユニークを指定すると)SQL Server:各行に一意の生成値を返します。

+0

ここをクリックしてください:http://stackoverflow.com/questions/17839420/generate-guid-for-every-row-in-a-column – swe

+0

答えは、ストアドプロシージャを使用する予定のコンテキストによって異なります。 –

+0

SPで何が起こっていて、どのように値を返すのですか?たとえば、SPの最後にSELECTステートメントがある場合、1つのアプローチをとることができます。出力パラメータを介してテーブル変数を返す場合は、別のアプローチを使用できます。 –

答えて

0
  • 乱数はオプションではありません。

  • ROW_NUMBERは、1行あたり8バイトの記憶域を占有します。

  • uniqueidentifierNEWSEQUENTIALID()シードGUIDからインクリメントするので、SQLのユニークな識別子はNEWID()NEWSEQUENTIALID()より遅いされた状態でのGUIDである)を単にインクリメントするROW_NUMBERより得るための16バイト構造とより高価です。

  • テーブル変数またはテンポラリテーブルにINSERTを入力する場合は、IDENTITYを使用できます。記憶域サイズは、列データ型のサイズです。整数型(ビットなし、小数点なし)でもかまいません。設定可能なオフセット(デフォルト1)から設定可能なオフセット(デフォルト1)に増加します。

これは、高速で信頼性の両方で、ROW_NUMBERあなたのベストフィットを作るようです。

あなたのデザインの選択肢は、パフォーマンスだけではありません。合理的に構成されたSQLサーバーのインストールでは、速度の違いに気付かず、リソースが非常に限られていない限り、ストレージにボトルネックがあってはいけません。むしろ古いものです。benchmarks here

返された行の特定の順序を維持したり保障したりするのに役立たないことに注意してください。ORDER BY最も外側のSELECTが必要です。

関連する問題