将SQL Server行插入格式化表中的特定位置

将SQL Server行插入格式化表中的特定位置,sql,sql-server-2012,sql-insert,corresponding-records,delete-record,Sql,Sql Server 2012,Sql Insert,Corresponding Records,Delete Record,我在创建数据库方面是新手,目前正试图完成一些对我来说确实必要的事情 假设我有一个数据库“Customer”,它有300行,所有行都有一个名为Id.的唯一标识符 Id_ | Customer | Postal | Country | 200 | Mica Sa. | 99582 | USA 201 | Shum Jr. | 10258 | USA 202 | Carl Ro. | 45697 | USA 203 | Brad Mi. | 24761 | USA 如果我使用以下命令删除行号202:

我在创建数据库方面是新手,目前正试图完成一些对我来说确实必要的事情

假设我有一个数据库“Customer”,它有300行,所有行都有一个名为
Id.
的唯一标识符

Id_ | Customer | Postal | Country |
200 | Mica Sa. | 99582 | USA
201 | Shum Jr. | 10258 | USA
202 | Carl Ro. | 45697 | USA
203 | Brad Mi. | 24761 | USA
如果我使用以下命令删除行号202:

DELETE FROM Customer
WHERE Id_ = 202;
我得到:

Id_ | Customer | Postal | Country |
200 | Mica Sa. | 99582 | USA
201 | Shum Jr. | 10258 | USA
203 | Brad Mi. | 24761 | USA
但当我尝试使用以下命令插入行时:

INSERT INTO Customer (Id_, Customer, Postal, Country)
VALUES (202, 'Peter R.', 08574, 'USA');

我在数据库中随机插入了这一行,因此我的问题是如何将这一行准确地插入到
201(Id)
之后和
203(Id)
之前?

以帮助您解决一些问题:

  • ID字段似乎是int,而不是唯一标识符
  • Insert语句不是在数据库中随机生成的,而是转到最后一条记录。例如,如果你有201203,你插入202,它将在203之后
  • 选择记录的方式(以及获取和显示记录的方式)是另一回事。您可以运行返回203之前的202的查询,但这并不意味着这是存储在数据库中的方式
  • 如果ID实际上是int类型,我会重新确认,使它们自动递增

    按Id_uudesc从客户订单中选择*


您是否将Id作为主键?你指的是一行的位置吗?你不能用一个
按Id排序吗?数据很少在数据库中整齐地排列…我仍然不明白这个问题,你的意思是不能插入202还是行位置不是升序(或降序)?
id\ucode>列的
数据类型是什么?表没有顺序。保证行的检索顺序的唯一方法是在生成输出的查询上指定一个
orderby
子句。好的,那么我想这是不可能的,所以我的下一个问题是:当我右键单击DB表并选择edit all rows(编辑所有行)时,是否可以让SQl按特定顺序显示行?在本例中,它将按Id_uu值组织显示。行结束的位置取决于聚集索引。在堆中,或者如果聚集索引位于严格递增的列值上,则它们位于末尾,否则它们位于聚集索引指定的位置。当然,聚集索引是以某种方式组织的,这一事实对(保证)检索行的顺序没有影响。事实是我没有意识到这一点,只是因为99%的时候我使用auto inc作为索引,它们最终都会结束…好吧,那么我想这是不可能的,因此,我的下一个问题是:当我右键单击DB表并选择“编辑所有行”时,是否可以使SQl按特定顺序显示行?在本例中,它将按Id_uu值组织显示。我说数据是随机插入的,因为我有30000多行,当我使用“编辑所有行”选项时,我看不到要查找的行。