我有一个包含两列的SQL表:
int
Auto_Increment
varchar
当前114行在instancename后按字母顺序排序。
现在我想插入符合订单的新行。
所以说它以'B'开头,它将在id 14左右,因此必须'压下'id 14之后的所有行。我该怎么做?
答案 0 :(得分:5)
SQL表本身并没有订购! (它只是一个集合。)您只需添加新行并使用以下内容查看它:
select instancename
from thetable
order by instancename;
答案 1 :(得分:2)
我认为你以错误的方式解决这个问题。 ID不应该被更改。如果您有将这些ID作为外键引用的表,那么无论如何DBMS都不允许您更改它们。
相反,如果您需要按字母顺序排序特定查询的结果,请告诉SQL为您订购:
SELECT * FROM table ORDER BY instancename
顺便说一下,有时你想要的东西看起来似乎是一个关键(读取 - 每行必须是唯一的),但必须不时改变(例如产品表中的SKU)。出于同样的原因,这不应该是主键(毫无疑问,其他表可能会引用这些条目,每个表都需要更新)。
保持这些信息的独特性将有助于让您和其他所有从事该项目的人感到疯狂。
答案 2 :(得分:-1)
尝试使用结束并加入自我。
Update thetable
Set ID = r.ID
From thetable c Join
( Select instancename, Row_Number() Over(Order By instancename) As ID
From CollectionStatus) r On c.instancename= r.instancename
这应该将id列更新为有序号码。您可能必须先禁用它的身份。