【发布时间】:2021-01-10 03:15:33
【问题描述】:
我想在一个数字中添加一个序列号作为 Select 中的计算列。我尝试了以下但 SomeNumber = 50001 对于两行这意味着 Row_Number 似乎每行都重置为 1。我想生成一个数字,它为每一行递增并将其添加到 50000 并为每一行获取一个唯一的 SomeNumber 值。它需要在视图中工作。没有 Sprocs。 SQL Server 2008。我更愿意避免使用 SQL Server 的序列功能。该表已经有一个主键,它的值不能用于添加到 50000。50000 实际上是一个计算数字,如果向其中添加大数字,它可能会溢出 Int,因此我想添加1, 2, 3, ... 以减少发生这种情况的机会。
CREATE TABLE example
( name VARCHAR(10),
RN int)
INSERT INTO example
SELECT 'John', 1
UNION
SELECT 'Jane', 1
SELECT ROW_NUMBER() OVER(PARTITION BY RN ORDER BY RN) RowNumber,
(SELECT 50000 + ROW_NUMBER() OVER(PARTITION BY RN ORDER BY RN)) SomeNumber <== value doesn't change
FROM example
【问题讨论】:
-
值不稳定是否重要,即随着行的插入、更新和删除,
'John'的计算值可能会改变?或者可以在不更改表格数据的情况下进行更改,例如使用不能提供太多保证订单的order by (select null)? -
没关系。 SomeNumber 值用作 UI 的临时键。它不在乎价值。他们只需要独一无二。另外,我太早接受了@SteveC 的回答。实际上是不正确的。
标签: sql-server tsql sql-server-2008