Автоинкрементный подзапрос в операторе tsql select - PullRequest
5 голосов
/ 19 января 2012

У меня есть оператор выбора T-SQL, и я хочу автоматически увеличить столбец в нем (которого нет в базе данных)

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

Возможно ли это?

Ответы [ 2 ]

13 голосов
/ 20 января 2012

Предполагается, что вы используете SQL 2005 или более позднюю версию:

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

, чтобы упорядочить строки, возвращаемые из БД.Если вы хотите указать заказ, вы можете сделать это:

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

Для SQL 2000 и более ранних версий вам нужно уникальное значение для заказа по:

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
1 голос
/ 20 января 2012

Я думаю, что вы можете осуществить что-то вроде:

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

Мой ответ предполагал, что SQL Server 2005+, думаю, ответ D Stanley поможет вам в 2000 году.

...