【问题标题】:Insert SQL Server row into specific position in formatted table将 SQL Server 行插入格式化表中的特定位置
【发布时间】:2014-03-29 00:44:12
【问题描述】:

我是创建数据库的新手,目前正在尝试完成一些对我来说真正必要的事情。

假设我有一个包含 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作为主键吗?你指的是一行的位置吗?
  • 你不能只使用ORDER BY Id_吗?无论如何,数据很少在数据库中整齐排列......
  • 我还是没明白,你的意思是不能插入 202 还是行位置不是升序(或降序)?什么data typeid_ 列?
  • 表格没有订单。保证检索行的顺序的唯一方法是在产生输出的查询上指定ORDER BY 子句。
  • 好吧,那我猜是不可能的,所以我的下一个问题是:当我右键单击数据库表并选择编辑所有行时,是否可以让 SQl 以特定顺序显示行?在这种情况下,它将按 Id_ 值组织显示。

标签: sql sql-server-2012 sql-insert corresponding-records delete-record


【解决方案1】:

为了帮助您解决一些问题:

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

    Select * from Customer Order by Id_Desc

【讨论】:

  • 行的最终位置取决于聚集索引。在堆中,或者如果聚集索引位于严格递增的列值上,它们会走到最后,否则它们会到达聚集索引指示的位置。当然,聚集索引以某种方式组织这一事实对(保证)检索行的顺序没有影响。
  • 事实是我并没有意识到这一点,只是因为 99% 的时间我使用 auto inc 作为索引它们最终都结束了......
  • 好吧,那我猜是不可能的,所以我的下一个问题是:当我右键单击数据库表并选择编辑所有行时,是否可以让 SQl 按特定顺序显示行?在这种情况下,它将按 Id_ 值组织显示。
  • 我说数据是随机插入的,因为我有超过 30,000 行,当我使用编辑所有行选项时,我无法找到我正在查找的行。跨度>
猜你喜欢
  • 2011-10-21
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
相关资源
最近更新 更多