sql server 生成序列号

Posted

技术标签:

【中文标题】sql server 生成序列号【英文标题】:Sql server generate serial number 【发布时间】:2015-09-30 10:42:00 【问题描述】:

SQL Server 查询。我记得我找到了一种在选择数据时不使用 ROW_NUMBER 函数来生成序列号的方法。但我现在不记得了

是这样的:

DECLARE @num int
SET @num = 0
SELECT ??? as [Index], Name FROM Product

The result will be:
Index    | Name
1        | Rug
2        | Water
3        | Oil

我记得???像 @num = @num + 1 并且在此它使用了一个函数 CAST 或 ISNULL 或 CONVERT 或另一个(我不记得了,但我确定它不使用 ROW_NUMBER() 函数)

有没有办法做到这一点?

我使用 Row_number() 时遇到的问题:

select Id, Case when [type] = 'abc' then 1 else 0 end as Classification,
       ???? as DisplayOrder
from Product
order by Classification, ..., ..., ...

???如何在这里使用 Row_number() ? 我尝试 Row_number(over order by (select 1)) 但它在生成 Row_number 后运行“按分类排序,...”语句。这意味着序列号是在 order by statement action 之前生成的。

【问题讨论】:

你为什么不想使用row_number()。这将是这样做的自然方式。 你记错了。 SQL Server SELECT 可以为变量赋值。或者,它可以返回列。但是,它不会同时进行。 mysql 确实允许你做你想做的事。 是的,我在 My SQL 中看到,它是 @@num := @@num + 1 【参考方案1】:

试试

使用Row_Number()

SELECT ROW_NUMBER() OVER(ORDER BY NEWID()) as [Index], Name FROM Product

编辑 2:

使用Identity columnTemporary Table

create table #x([Index] bigint identity(1,1),Name varchar(200))

insert into #x(Name)
SELECT Name FROM Product

select * from #x

drop table #x

【讨论】:

以上是关于sql server 生成序列号的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql server中根据条件生成序列号

sql server sql语句创建序列怎么写?

请问sqlserver中的两个表怎么进行关联

SQL server 2008中 怎样用update 修改指定行号列号的数据?

sql server 2012序列号 注册码

sql server2012密钥 用哪个