2012-01-19 11 views
5

私は、T-SQL select文を持っていると私はそれの列(つまり、データベースに存在しない)自動インクリメントのサブクエリは

select dbo.a, dbo.b, dbo.c, select @d:=1; @increment:[email protected]+1 AS d 

が、このことは可能です自動インクリメントしたいです?

+0

SQL Server 2000が間もなく引退しなければならない - でも、2005年版が正式にもうMSによってサポートされていません.... –

答えて

13

のお手伝いをすると思いますSQL 2005以降:彼らはDBフォーム返されるよう

SELECT dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER(ORDER BY GETDATE()) AS d 

行を注文します。あなたが順序を指定したい場合は、そうすることができます:SQL 2000の場合

SELECT dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER(ORDER BY dbo.a) AS d 

を以前のあなたがで注文するユニークな値を必要とする:

SELECT dbo.a, dbo.b, dbo.c, (SELECT COUNT(*) FROM dbo d2 WHERE d2.a <= dbo.a) AS d 
FROM dbo 

またはあなたは、単一のSELECTを必要としない場合:

SELECT IDENTITY(int,1,1) ID, dbo.a, dbo.b, dbo.c 
INTO #Temp 
FROM dbo 

SELECT * FROM #Temp 
+0

I HAV e SQL2000。その他の方法で? – tdjfdjdj

1

私はあなたのようなものでそれをやってのけることができると思います。

select dbo.a, dbo.b, dbo.c, ROW_NUMBER() OVER (order by dbo.a) as d from somewhere; 

私の答えは、SQL Serverの2005+を想定し、私はD・スタンレーの答えはあなたが使用していると仮定すると、2000年

+1

'ROW_NUMBER()' SQL Server 2005の新だった、OPは、SQL Server 2000を使用しています –