我有一个Countries(ID,Code,Name,....) table.here 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值,我需要按ID和CODE排序列表,.Its ok。我在ID上有一个聚集索引。
请,请给我一个建议。
发布于 2013-01-16 19:47:38
ID (作为标准主键)不用于排序目的。你不应该依赖它。我建议您改为添加SortIndex字段。然后在两个简单的查询中
UPDATE Countries set SortIndex = SortIndex+1 WHERE SortIndex>= [your index]和
INSERT INTO Countries VALUES (...)你会得到你想要的。另外,请不要忘记在select查询中添加ORDER BY SortIndex。
发布于 2013-01-16 19:50:00
像这样改变实体的pk值可能会导致痛苦的世界。一旦ID被分配给一个特定的实体,它就不应该改变。
例如,您有另一个表,其中包含一个国家/地区id的FK。在您的示例中,与Anguilla相关的其他行现在将与"AH“表示的国家/地区相关。
听起来您对国家代码的字母顺序很感兴趣。所以为了排序,你只需要ORDER BY Code -你不应该改变pk值来适应你所需要的排序顺序
发布于 2013-01-16 19:52:16
你能解释一下你为什么要这样做吗?在我看来,这毫无意义。也许你应该添加一个"SortOrder“列或者别的什么?如果ID是某种业务规则的一部分,则应尽可能更改设计。
编辑:正如在其他一些帖子中已经回答的那样:)
https://stackoverflow.com/questions/14357625
复制相似问题