ホームページ >データベース >mysql チュートリアル >SQL Server 2005 で ROW_NUMBER() を使用して非 ID 列を自動インクリメントするにはどうすればよいですか?
SQL Server 2005 での自動インクリメントに ORDER BY を使用せずに ROW_NUMBER() を使用する
SQL Server 2005 では、非ID 列は、ROW_NUMBER() と適切な ORDER BY 基準がない。ただし、代替案があります:
Constant Order By 句で ROW_NUMBER() を使用する:
有効な 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 列の一意性を確保しながら、明示的な順序付けを回避します。
警告: 元の順序付けは保証されません:
このアプローチでは、元の SourceTable の順序の保持が保証されないことに注意することが重要です。外部クエリの ORDER BY などの他の要因は、結果の順序付けに影響を与える可能性があります。
同時実行性に関する考慮事項:
ロック ヒント (TABLOCKX および HOLDLOCK) は、クエリを使用して、同時プロセスがクエリ実行ステップ間で同じ ID を挿入するのを防ぎます。ただし、このアプローチは ID 列を使用するほど効率的ではないため、回避策としてのみ考慮してください。
推奨される解決策: ID 列を使用します:
最適なパフォーマンスと同時実行性を考慮して、自動インクリメントには ID 列を使用することを強くお勧めします。
以上がSQL Server 2005 で ROW_NUMBER() を使用して非 ID 列を自動インクリメントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。