如何在删除行后更新“行号”列值 1..N?
How to update “row number” column values 1..N after rows are DELETED?
我有这个table:
当我删除这个 table 中的一个框时,我需要对以下所有行进行递增。
例如:如果我删除 BoxNo '4' 那么 BoxNo 最后一行之后的行 '4' (5,6,7,..etc) 必须递增 1,就像 (4,5,6,...etc.).希望我能成功解释问题。
能否请您帮助我通过 SQL 服务器查询来执行此操作?
提前致谢。
删除行后自动执行操作是 TRIGGERS 的目的。
在你的情况下,它看起来像:
CREATE TRIGGER MyTable_AfterDelete
ON MyTable
FOR DELETE
AS
update MyTable set RowCounter = RowCounter + 1
from deleted
inner join MyTable on MyTable.BoxNo > deleted.BoxNo
GO
如您所见SQL 服务器不会在每行删除后触发触发器,而是在每次执行 DELETE 语句后触发,这可能涉及删除多行,因此我们需要使用 "deleted"伪table 对删除的每一行应用我们的操作。
PS:这就是你所要求的可以完成的方式,尽管我同意评论说你可以更好地构建这个问题而不需要每次删除后更新这么多行。
更新
如果您想在每个删除指令上手动执行它,而不是在触发器上自动执行,您可以将 parameter 传递给 C# 上的 DELETE 语句,以便更新后面的 RowCounters。类似于:
delete from MyTable where BoxNo = @BoxNo
update MyTable set RowCounter = RowCounter + 1 where BoxNo > @BoxNo
我有这个table:
当我删除这个 table 中的一个框时,我需要对以下所有行进行递增。
例如:如果我删除 BoxNo '4' 那么 BoxNo 最后一行之后的行 '4' (5,6,7,..etc) 必须递增 1,就像 (4,5,6,...etc.).希望我能成功解释问题。
能否请您帮助我通过 SQL 服务器查询来执行此操作?
提前致谢。
删除行后自动执行操作是 TRIGGERS 的目的。
在你的情况下,它看起来像:
CREATE TRIGGER MyTable_AfterDelete
ON MyTable
FOR DELETE
AS
update MyTable set RowCounter = RowCounter + 1
from deleted
inner join MyTable on MyTable.BoxNo > deleted.BoxNo
GO
如您所见SQL 服务器不会在每行删除后触发触发器,而是在每次执行 DELETE 语句后触发,这可能涉及删除多行,因此我们需要使用 "deleted"伪table 对删除的每一行应用我们的操作。
PS:这就是你所要求的可以完成的方式,尽管我同意评论说你可以更好地构建这个问题而不需要每次删除后更新这么多行。
更新
如果您想在每个删除指令上手动执行它,而不是在触发器上自动执行,您可以将 parameter 传递给 C# 上的 DELETE 语句,以便更新后面的 RowCounters。类似于:
delete from MyTable where BoxNo = @BoxNo
update MyTable set RowCounter = RowCounter + 1 where BoxNo > @BoxNo