私を助けてください!値が1、2、4、6、8、10、11 ....などのIDフィールドを持つテーブルがあります。
ドロップを使わずに、1,2,3,4,5,6,7...という順番で作りたい
ありがとう
私を助けてください!値が1、2、4、6、8、10、11 ....などのIDフィールドを持つテーブルがあります。
ドロップを使わずに、1,2,3,4,5,6,7...という順番で作りたい
ありがとう
できません。identity
列は更新できません。(または、少なくとも正気の方法ではできません。テーブルからすべての行を削除してから、IDENTITY_INSERT
onで再挿入できます)
また、列のギャップは、identity
受け入れることが最善の現実です。表示目的で連続した数列が必要な場合は、 を使用できますROW_NUMBER
。
新しいフィールドを作成し、ID シードを 1 から開始してから、古い列を削除し、新しい列の名前を変更してください (その後、すべての FK 参照を再作成してください)。
これを行う簡単な方法はありません。また、そうしなければならない理由もありません。ただし、同様の機能を提供するビューを構築できます。
CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable
次に、クライアントに代わりに MyTableView から選択してもらいます。
ビューにテーブルと同じ名前を付ける必要がある場合は、下位互換性を確保するために、もちろんテーブルの名前を変更してから、古いテーブル名でビューを作成できます。
それが最善の解決策だと思います..気に入ったら試してみてください…</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 挿入を削除する必要があります。