2

我有一个Countries(ID,Code,Name,....)表。这ID是一个自动生成的主键列。

这是几行:

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

现在的问题是我找不到添加新国家代码的方法,比如说“AH”,这样表格就会自动变成......

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

换句话说,我需要按ID和排序的列表。CODE如果我需要更改一些 ID 值,就可以了。我有一个聚集索引ID

PLZ,请给我一个方法...

4

4 回答 4

4

ID(作为标准主键)不用于排序目的。你不应该依赖它。我建议您改为添加SortIndex字段。然后在两个简单的查询中

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

INSERT INTO Countries VALUES (...)

你会得到你需要的。另外请不要忘记添加ORDER BY SortIndex选择查询。

于 2013-01-16T11:47:37.757 回答
3

像这样改变实体的PK值,很可能会走向痛苦的世界。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 回答