ホームページ > データベース > mysql チュートリアル > SQL Server 2005 で ORDER BY を使用せずに非 ID 列を自動インクリメントするにはどうすればよいですか?

SQL Server 2005 で ORDER BY を使用せずに非 ID 列を自動インクリメントするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-30 02:59:24
オリジナル
993 人が閲覧しました

How to Auto-Increment a Non-Identity Column in SQL Server 2005 Without ORDER BY?

ORDER BY を使用しない SQL Server 2005 での自動インクリメント ID の生成

自動インクリメント中に、あるテーブルから別のテーブルにデータを挿入する必要性ID 以外の列は困難になる可能性があります。標準的なアプローチには、カーソルの使用またはテーブル変数の作成が含まれますが、これらは非効率的な場合があります。

正当な ORDER BY フィールドがない場合は、ROW_NUMBER 関数を使用できます。ただし、明示的な順序付けがないからといって、元のデータの順序が保持されることは保証されません。これは、「順序付けされていない」ことと「元の順序を保持している」ことは異なるためです。

この問題に対処するには、次のように明示的な順序付けを避けることが解決策となります。

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};
ログイン後にコピー

このアプローチでは、最大値が計算されます。同時実行エラーを回避するために、ロックの取得中にデータを ID 化して挿入します。

ただし、ロックやロックの必要性がなくなるため、ID 列を使用することを強くお勧めします。最適な同時実行性を保証します。 ID 列は、SQL Server で ID を自動インクリメントするための、より効率的かつ堅牢なソリューションを提供します。

以上がSQL Server 2005 で ORDER BY を使用せずに非 ID 列を自動インクリメントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート