1
列のIdentityプロパティの削除がサポートされていないのはなぜですか
SQL Server 2000以降、ID列を "非ID"にする機能が削除されたことを読んだことがあります。そして、これは「設計どおり」でした(欠けている機能だけでなく)。 これが私がブログで見つけた例です。システムテーブルの更新が含まれます。(そしてその機能はSQL Server 2000の後で削除されました。)私はシステムテーブルを介してこれを行うのは良い考えではないことを理解しています。なぜこれを別の方法で実行する機能がないのか疑問に思っています。 これを回避すると、かなりの量の作業が必要になります。(ダウンタイムに耐えられない環境で、数億行を新しいテーブルにコピーする。) だから、「なんで」と聞いてみました。 SQL Server 2005以降のバージョンで何が変更されて、これは悪いことでしたか?それとも、それは常に悪いことでしたか? ID列を再び通常の列にすることにより、どの「ベストプラクティス」(または同様の原則)に違反しますか? - 「 これを行う理由」の要求に答えるための更新:これは非常に高レベルの要約です:テーブルにパーティションを追加し始めます。(古いデータをアーカイブ/パージできるようにするためです。)それは簡単です。ただし、レコードが別のパーティションに移動して、削除されないようにする必要がある場合があります(パーティションがアーカイブ/削除のために表示される場合)。(行を別のパーティションに移動するためのスペースが常にあるように、パーティション列を2増やしています。) しかし、パーティション列がID列の場合、値を削除して再挿入する必要があります(ID列の値を更新する方法はありません)。これにより、レプリケーションで問題が発生します。 そのため、ID列の代わりにシーケンスを使用したいと考えています。しかし、その切り替えは、大規模なデータベースでは非常に困難です。