删除除最后一行以外的任何行后,如何重新排序自动递增列值?
How to reorder auto increment column values, after deleting any row other than last row?
我想知道是否有任何 SQL 查询 asp.net,c# 可以重新安排自动递增列值..
例如。
删除 table 中的 2:
没有
1
2
3
4
会:
没有
1
3
4
但我想重新安排:
没有
1
2
3
注:
- 不想手动编号
- 创建 table 的查询是这样的:
CREATE TABLE uid (sno int IDENTITY(1,1) PRIMARY KEY, qpname nvarchar(500), mob int, tm int)
以下是应该 运行 1 之后才能完成此功能的查询。这可以在 C# 中通过执行通用的 ExecuteNonQuery() 轻松实现。
DELETE FROM TBL1 WHERE sno = @sno;
UPDATE TBL1
SET sno = sno -1
WHERE sno > @sno;
将您的 table 命名为 Parent,将保存备份的 table 称为 Backup。他们应该有相同的列。
INSERT INTO dbo.Backup
SELECT * FROM dbo.Parent
现在截断父级 table
TRUNCATE TABLE dbo.Parent
现在您可以使用第一个命令将数据插入回原位并反转 table 名称。
请记住,这可能并非在所有情况下都有效。您可能打开了 On delete cascade
,如果是这种情况,那么您将丢失来自其他 table 的所有数据,这些数据也引用父 table。我认为你永远不应该使用这个,因为你正在使用这个 table.
上的任何 Foriegn Key 参考
我想知道是否有任何 SQL 查询 asp.net,c# 可以重新安排自动递增列值..
例如。 删除 table 中的 2:
没有
1
2
3
4
会:
没有
1
3
4
但我想重新安排:
没有
1
2
3
注:
- 不想手动编号
- 创建 table 的查询是这样的:
CREATE TABLE uid (sno int IDENTITY(1,1) PRIMARY KEY, qpname nvarchar(500), mob int, tm int)
以下是应该 运行 1 之后才能完成此功能的查询。这可以在 C# 中通过执行通用的 ExecuteNonQuery() 轻松实现。
DELETE FROM TBL1 WHERE sno = @sno;
UPDATE TBL1
SET sno = sno -1
WHERE sno > @sno;
将您的 table 命名为 Parent,将保存备份的 table 称为 Backup。他们应该有相同的列。
INSERT INTO dbo.Backup
SELECT * FROM dbo.Parent
现在截断父级 table
TRUNCATE TABLE dbo.Parent
现在您可以使用第一个命令将数据插入回原位并反转 table 名称。
请记住,这可能并非在所有情况下都有效。您可能打开了 On delete cascade
,如果是这种情况,那么您将丢失来自其他 table 的所有数据,这些数据也引用父 table。我认为你永远不应该使用这个,因为你正在使用这个 table.