2


0

SQL Serverでインクリメントする数値を生成する関数

関数から選択し、インクリメントする数値を返す方法はありますか?

たとえば、次のようにします。

SELECT SomeColumn, IncrementingNumbersFunction() FROM SomeTable

そしてそれを返させる:

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

5 Answer


11


SQL Server 2005以降では、http://msdn.microsoft.com/en-us/library/ms186734.aspx [ROW_NUMBER()]を使用できます。

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

0 SQL Server 2000では、IDを使用できますが、削除がある場合はギャップがあります

ID列を使用して通常のテーブルにギャップがある場合のSQL 2000コード。IDを使用してtempに挿入し、そこから選択します。

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


 SELECT * FROM #temp
 ORDER BY IncrementingNumbers


2


ID列を自動的にインクリメントすることもできますか、それとも質問の理解を逃しますか?


2


SQL Server 2005で追加された* ROW_NUMBER *を探していると思います。 「結果セットのパーティション内の行の連続番号を返します。各パーティションの最初の行の1から始まります。」

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;


2


SQL 2012以降のバージョンから、https://docs.microsoft.com/en-us/sql/relational-databases/sequence-numbers/sequence-numbers [組み込みシーケンス機能]があります。

例:

-- 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;


1


いいえ、SQLServerにはシーケンス生成関数はありません。 現在の問題を解決するには、http://msdn.microsoft.com/en-us/library/Aa933196 [* identity *]フィールドタイプが便利です。