在任何表的中间插入数据

时间:2013-01-16 11:42:29

标签: sql sql-server

我有一个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}

换句话说,我需要按IDCODE排序列表。如果我需要更改一些ID值,则可以。 我在ID上有一个聚集索引。

PLZ,PLZ建议我一个方法......

4 个答案:

答案 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');