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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-30 02:59:241003ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。