Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在任意表中间插入数据_Sql_Sql Server - Fatal编程技术网

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 (...)