2012-01-19 4 views
5

Tôi có một T-SQL lựa chọn công bố và tôi muốn tự động tăng một cột trong đó (có nghĩa không tồn tại trong cơ sở dữ liệu)Auto-increment subquery trong lựa chọn công bố TSQL

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

Đây có phải là có thể ?

+0

SQL Server 2000 sẽ sớm được gỡ bỏ - ngay cả phiên bản 2005 không được hỗ trợ chính thức bởi MS nữa .... –

Trả lời

13

Giả sử bạn đang sử dụng SQL 2005 hoặc mới hơn:

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

để sắp xếp các hàng khi chúng được trả về, tạo thành DB. Nếu bạn muốn chỉ định một thứ tự bạn có thể làm như vậy:

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

Đối với SQL 2000 và trước đó bạn cần có một giá trị duy nhất để đặt hàng theo:

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

hoặc nếu bạn không cần phải có đơn CHỌN :

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

SELECT * FROM #Temp 
+0

Tôi hav e SQL2000. Bất kỳ cách nào khác? – tdjfdjdj

1

Tôi nghĩ bạn có thể kéo nó ra khỏi với một cái gì đó như:

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

câu trả lời của tôi giả định SQL Server 2005 +, tôi nghĩ rằng D Stanley câu trả lời sẽ giúp bạn trong năm 2000.

+1

'ROW_NUMBER()' là mới cho SQL Server 2005, OP đang sử dụng SQL Server 2000 –