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 column
和Temporary 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 生成序列号的主要内容,如果未能解决你的问题,请参考以下文章