1

私を助けてください!値が1、2、4、6、8、10、11 ....などのIDフィールドを持つテーブルがあります。

ドロップを使わずに、1,2,3,4,5,6,7...という順番で作りたい

ありがとう

4

5 に答える 5

3

できません。identity列は更新できません。(または、少なくとも正気の方法ではできません。テーブルからすべての行を削除してから、IDENTITY_INSERTonで再挿入できます)

また、列のギャップは、identity受け入れることが最善の現実です。表示目的で連続した数列が必要な場合は、 を使用できますROW_NUMBER

于 2011-04-27T14:14:49.573 に答える
1

新しいフィールドを作成し、ID シードを 1 から開始してから、古い列を削除し、新しい列の名前を変更してください (その後、すべての FK 参照を再作成してください)。

于 2011-04-27T14:32:53.810 に答える
1

これを行う簡単な方法はありません。また、そうしなければならない理由もありません。ただし、同様の機能を提供するビューを構築できます。

CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable

次に、クライアントに代わりに MyTableView から選択してもらいます。

ビューにテーブルと同じ名前を付ける必要がある場合は、下位互換性を確保するために、もちろんテーブルの名前を変更してから、古いテーブル名でビューを作成できます。

于 2011-04-27T14:33:29.840 に答える
1

それが最善の解決策だと思います..気に入ったら試してみてください…</p>

DECLARE @INC AS INTEGER 
SET @INC = 1 
WHILE (@INC <= 7582) --7582 is rowcount of table
BEGIN
    UPDATE YourTable
    SET    ID = @INC
    WHERE  ID = (
               SELECT MIN(ID) AS T
               FROM   YourTable
               WHERE  ID > @INC
           ) --ID=> Identity column
    SET @INC = @INC + 1
END 

注: 実行する前に、列への ID 挿入を削除する必要があります。

于 2014-08-07T08:34:40.170 に答える