在SQL Server中生成递增数字的函数

时间:2010-08-24 17:38:19

标签: sql-server tsql

有没有办法从函数中选择并让它返回递增的数字?

例如,执行此操作:

SELECT SomeColumn, IncrementingNumbersFunction() FROM SomeTable

让它回归:

SomeColumn | IncrementingNumbers
--------------------------------
some text  | 0
something  | 1
foo        | 2

5 个答案:

答案 0 :(得分:11)

在sql server 2005及更高版本上,您可以使用ROW_NUMBER()

SELECT SomeColumn, 
     ROW_NUMBER() OVER(Order by SomeColumn) as IncrementingNumbers
 FROM SomeTable

0在SQL Server 2000中,您可以使用标识但如果删除则会有空白

SQL 2000代码,以防你的常规表中有一个带有标识列的空白,插入带有标识的temp,然后从中选择

SELECT SomeColumn, 
     IDENTITY( INT,1,1) AS IncrementingNumbers
     INTO #temp
 FROM SomeTable
 ORDER BY SomeColumn


 SELECT * FROM #temp
 ORDER BY IncrementingNumbers

答案 1 :(得分:2)

您可以使用自动增量标识列,还是我不会理解这个问题?

http://msdn.microsoft.com/en-us/library/Aa933196

答案 2 :(得分:2)

我认为您正在寻找在SQL Server 2005中添加的 ROW_NUMBER 。它“返回结果集的分区中的行的序号,从每个第一行的第1行开始分区“。

From MSDN(还有更多)以下示例根据年初至今的销售情况返回AdventureWorks2008R2中销售人员的ROW_NUMBER。

SELECT FirstName, LastName, ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number', SalesYTD, PostalCode 

FROM Sales.vSalesPerson

WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;

答案 3 :(得分:2)

从SQL 2012及更高版本开始,有一个built-in sequence feature

示例:

-- sql to create the Sequence object
CREATE SEQUENCE dbo.MySequence
    AS int  
    START WITH 1  
    INCREMENT BY 1 ;  
GO

-- use the sequence
SELECT NEXT VALUE FOR dbo.MySequence;
SELECT NEXT VALUE FOR dbo.MySequence;
SELECT NEXT VALUE FOR dbo.MySequence;

答案 4 :(得分:1)

不,SQLServer中没有序列生成函数。您可能会找到identity字段类型来解决当前问题。