8

如何显示表中的行数,当添加新记录时,表示该行的数字会更高,而当删除记录时,数字会相应更新?
更清楚地说,假设我有一个像这样的简单表格:

ID int(主键) 名称 varchar(5)

ID 设置为自行递增(使用标识规范),因此它不能表示行(记录)的数量,因为如果我有例如 3 条记录:

ID NAME
1 亚历克斯
2 斯科特
3 萨拉

我删除了 Alex 和 Scott 并添加了一条新记录:

3 Sara
4 Mina 

所以基本上我正在寻找一个 sql 端解决方案来执行此操作,这样我就不会在多个地方更改源代码中的任何其他内容。

我试图写一些东西来完成工作,但它失败了。这里是 :

SELECT        COUNT(*) AS [row number],Name
FROM          dbo.Test
GROUP BY ID, Name
HAVING        (ID = ID)

这显示为:

row number            Name
1                     Alex
1                     Scott
1                     Sara

虽然我希望它显示为:

row number            Name
1                     Alex
2                     Scott
3                     Sara
4

4 回答 4

10

如果您只想在选择数据而不是在数据库中的行中使用数字,那么您可以使用它

select row_number() over(order by id) from dbo.Test

这将给出第 n 行的行号 n。

于 2013-02-17T18:43:10.400 回答
3

尝试

SELECT id, name, ROW_NUMBER() OVER (ORDER BY id) AS RowNumber
FROM   MyTable
于 2013-02-17T18:46:04.967 回答
2

您想要的称为自动增量。

对于 SQL-Server,这是通过将IDENTITY(1,1)属性添加到表定义来实现的。

其他 RDBMS 使用不同的语法。例如,Firebird 有生成器,可以进行计数。在 BEFORE-INSERT 触发器中,您可以将 ID 字段分配给生成器的当前值(将自动增加)。

于 2013-02-17T18:27:39.497 回答
0

前段时间我遇到了这个确切的问题,但我使用的是 SQL Server 2000,所以虽然 row number() 是最好的解决方案,但在 SQL Server 2000 中,这是不可用的。解决方法是创建一个临时表,插入所有具有自动增量的值,然后用 T-SQL 中的新表替换当前表。

于 2013-02-17T20:20:04.320 回答