5

700 万を超えるレコードを含むテーブルがあります。テーブルに主キーがありません。新しい ID 列を追加して、これを主キーとして設定したいと考えています。SSMSを使用して列を追加してみましたが、それを主キーとして設定しました。この新しい列を Id と呼びました。

これはほとんど機能しましたが、テーブルのデフォルトの順序を別の列に基づくように変更したかったのです。たとえば、降順の日時列です。これは可能ですか?おそらく、一時テーブルとROW_NUMBER()関数を使用する必要があります。

しかし、私はSQLがあまり得意ではありません。誰か助けてくれませんか?

元のテーブルに戻れるように、ロールバック スクリプトも必要です。

4

2 に答える 2

13

もう 1 つのアイデアを次に示します。

Step1 - 「降順の日時列」に一時的なクラスター化インデックスを作成する

CREATE CLUSTERED INDEX ix_YourTableTEMP ON YourTable (DateTimeColumn DESC)

ステップ 2 - ID 列を追加します。これで、IDは以前に作成されたインデックスの順序になっているはずですが、これに 100% の保証があるとは思いません。

ALTER TABLE YourTable ADD IdColumn INT IDENTITY(1,1)

Step3 - 一時インデックスを削除

DROP INDEX  ix_YourTableTEMP ON YourTable 

ステップ4 - 新しい列に新しいクラスター化された PK を作成する

ALTER TABLE YourTable 
ADD CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED (IdColumn)
于 2013-06-11T10:15:29.660 に答える