Sql 在任意表中间插入数据
我有一个Sql 在任意表中间插入数据,sql,sql-server,Sql,Sql Server,我有一个国家(ID,code,Name,…)表。这里ID是一个自动生成的主键列 以下是几行: {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,code,Name,…)
表。这里ID
是一个自动生成的主键列
以下是几行:
{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
上有一个聚集索引
请,请给我一个建议…您可以在插入新记录之前更新表
update Countries set id = id + 1 where id >= 3;
那么
ID
(作为标准主键)不用于排序目的。你不应该依赖它。我建议您改为添加SortIndex字段。然后在两个简单的查询中
UPDATE Countries set SortIndex = SortIndex+1 WHERE SortIndex>= [your index]
及
你会得到你需要的。另外,请不要忘了在select查询中按SortIndex添加
订单。更改这样一个实体的PK值很可能会带来痛苦。一旦将ID分配给特定实体,它就不应该更改
e、 g.您有另一个表,其中FK表示国家id。在您的示例中,与安圭拉相关的其他行现在将与“AH”表示的国家相关
听起来你对国家代码的字母顺序很感兴趣。因此,出于排序目的,您只需按代码顺序进行排序-您不应更改PK值以适应所需的排序顺序。您能解释一下为什么要这样做吗?在我看来这毫无意义。也许你应该加一个“排序器”栏或其他什么?如果ID是某种业务规则的一部分,则应在可能的情况下更改设计
编辑:正如在其他一些帖子中已经回答的:)为什么您需要ID
列来进行排序?如果您确实需要与code
列不同的内容,您可以添加另一列SortIndex
。如果您希望这样做,请不要忘记将identity insert设置为-->设置identity\u insert Countries设置为on(但我建议查看其他答案并采取其他方法)
UPDATE Countries set SortIndex = SortIndex+1 WHERE SortIndex>= [your index]
INSERT INTO Countries VALUES (...)