有没有办法从函数中选择并让它返回递增的数字?
例如,执行此操作:
SELECT SomeColumn, IncrementingNumbersFunction() FROM SomeTable
让它回归:
SomeColumn | IncrementingNumbers
--------------------------------
some text | 0
something | 1
foo | 2
答案 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)
您可以使用自动增量标识列,还是我不会理解这个问题?
答案 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字段类型来解决当前问题。