我有一个名为的表ComplaintCodes
,其中包含大约 15 行和 2 列:ComplaintCodeId
和ComplaintCodeText
.
我想在该表中插入一个新行,但将其 ID 设置为 1,这也将为所有已经存在的 ID 添加 1。这可能吗?
编辑
使用 SQL Server 并且ComplaintCodeId
是一个身份/PK 列
我有一个名为的表ComplaintCodes
,其中包含大约 15 行和 2 列:ComplaintCodeId
和ComplaintCodeText
.
我想在该表中插入一个新行,但将其 ID 设置为 1,这也将为所有已经存在的 ID 添加 1。这可能吗?
使用 SQL Server 并且ComplaintCodeId
是一个身份/PK 列
可以作为两个单独的 DML 语句,一个更新 ID 的 UPDATE 和一个后续的 INSERT。但是,如果您在另一个表中使用 ID 作为外键当然会失败,因此您需要找到一种方法来更新所有相关表。
你为什么要这样做呢?建议您退后一步,重新考虑导致您遇到此问题的设计决策。
是的,正如 podiluska 在他/她(/its!)评论中所说,请指定您在问题和/或标签中使用的 DBMS。
update <table> set ComplaintCodeId =ComplaintCodeId +1
insert into <table>
select 1,'other column'
编辑:
如果它是一个 PK+Identity 列,那么这样做是一个非常糟糕的主意。您无法更新身份列..
您可以执行以下操作,而不是更新:
select row_number() over (order by ComplaintCodeId desc) as row_num,
ComplaintCodeId
from table
并使用 row_num 而不是 ComplaintCodeId
经过一番思考,在我看来,解决您问题的最佳方法是将PK更改为非身份。然后,您可以将值设置为您想要的任何值。
我仍然认为使用显示顺序列(这是我认为您会关心表中顺序的唯一原因)将是一个很好的解决方案,但是如果您真的希望 PK 顺序成为显示顺序,那么更改PK到非身份将是一个很好的长期解决方案,因为您将来不会遇到这些问题。