我有一个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,PLZ建议我一个方法......
答案 0 :(得分:4)
ID
(作为标准主键)不用于排序目的。你不应该依赖它。我建议您添加 SortIndex 字段。然后在两个简单的查询,如
UPDATE Countries set SortIndex = SortIndex+1 WHERE SortIndex>= [your index]
和
INSERT INTO Countries VALUES (...)
您将得到您所需要的。另外,请不要忘记在选择查询中添加ORDER BY SortIndex
。
答案 1 :(得分:3)
改变像这样的实体的PK值很可能会带来痛苦的世界。将ID分配给特定实体后,不应更改。
e.g。你有另一个表具有国家ID的FK。在您的示例中,与安圭拉相关的其他行现在将与“AH”所代表的国家/地区相关联。
听起来您对国家/地区代码的字母顺序感兴趣。因此,出于排序目的,您只需要ORDER BY Code
- 您不应该更改PK值以满足您所需的排序顺序
答案 2 :(得分:1)
你能解释一下你为什么要这样做吗?在我看来这没有任何意义。也许您应该添加“SortOrder”列或其他内容?如果ID是某种业务规则的一部分,则应尽可能更改设计。
编辑:正如其他几篇文章所述:)
答案 3 :(得分:0)
您可以在插入新记录之前更新表格。
update Countries set id = id + 1 where id >= 3;
然后,
insert into Countries values (3,'AH','AH');