2

私はテーブルを持っていますCountries(ID,Code,Name,....).hereIDは自動生成された主キー列です。

これはいくつかの行です:

{1,AD,Andorra};
{2,AG,Antigua and Barbuda};
{3,AI,Anguilla}

今問題は、新しい国コードを追加する方法が見つからないことです。テーブルが自動的に次のようになるような方法で「ああ」と言います..

{1,AD,Andorra} 
{2,AG,Antigua and Barbuda}
{3,AH,......}
{4,AI,Anguilla}

言い換えれば、およびでソートされたリストがID必要CODEです。ID値を変更する必要がある場合は問題ありません。にクラスター化インデックスがありIDます。

plz、plz私に方法を提案してください...

4

4 に答える 4

4

ID(標準の主キーとして)ソートを目的としたものではありません。あなたはそれに頼るべきではありません。代わりにSortIndexフィールドを追加することをお勧めします。次に、次のような2つの簡単なクエリで

UPDATE Countries set SortIndex = SortIndex+1 WHERE SortIndex>= [your index]

INSERT INTO Countries VALUES (...)

あなたはあなたが必要なものを手に入れるでしょう。ORDER BY SortIndexまた、selectクエリを追加することを忘れないでください。

于 2013-01-16T11:47:37.757 に答える
3

このようなエンティティの PK 値を変更すると、痛みの世界に向かう可能性があります。ID が特定のエンティティに割り当てられると、ID は変更されません。

たとえば、国 ID への FK を持つ別のテーブルがあるとします。あなたの例では、アンギラに関連する他の行は、「AH」が表す国に関連するようになります。

国コードのアルファベット順に興味があるようですね。したがって、並べ替えの目的で必要なORDER BY Codeのは、必要な並べ替え順序に合わせて PK 値を変更しないことです。

于 2013-01-16T11:50:00.263 に答える
1

なぜこれをやりたいのか説明してもらえますか?私の意見では意味がありません。代わりに「SortOrder」列などを追加する必要がありますか? ID が何らかのビジネス ルールの一部である場合は、可能であれば設計を変更する必要があります。

編集:他のいくつかの投稿ですでに回答されているように:)

于 2013-01-16T11:52:16.420 に答える
0

新しいレコードを挿入する前に、テーブルを更新できます。

update Countries set id = id + 1 where id >= 3;

それで、

insert into Countries values (3,'AH','AH');
于 2013-01-16T11:46:36.087 に答える