2008-09-26 32 views

Trả lời

10

Nếu bạn đang sử dụng GUIDs, điều này sẽ tốt đẹp dễ dàng, nếu bạn đang tìm kiếm một số nguyên ID, bạn sẽ phải đợi câu trả lời khác.

SELECT newId() AS ColId, Col1, Col2, Col3 FROM table1 

NewId() sẽ tạo GUID mới cho bạn mà bạn có thể sử dụng làm cột id được tạo tự động.

+0

Ngắn và ngọt chính xác những gì tôi cần. –

1

Đây có lẽ là điều bạn đang tìm kiếm không?

chọn NEWID() * từ TABLE

13

SẮC (int, 1, 1) nên làm điều đó nếu bạn đang làm một chọn vào. Trong SQL 2000, tôi sử dụng để chỉ cần đặt kết quả trong một bảng tạm thời và truy vấn mà afterwords.

+0

Cảm ơn! Đây chỉ là những gì tôi đang tìm kiếm. (Bạn có lỗi đánh máy, nó phải là "IDENTITY (int, 1, 1)".) –

1

Bạn có muốn một cột số nguyên tăng dần được trả lại bằng recordset của bạn không? Nếu vậy: -

--Check for existance 
if exists (select * from dbo.sysobjects where [id] = object_id(N'dbo.t') AND objectproperty(id, N'IsUserTable') = 1) 
drop table dbo.t 
go 

--create dummy table and insert data 
create table dbo.t(x char(1) not null primary key, y char(1) not null) 
go 
set nocount on 
insert dbo.t (x,y) values ('A','B') 
insert dbo.t (x,y) values ('C','D') 
insert dbo.t (x,y) values ('E','F') 

--create temp table to add an identity column 
create table dbo.#TempWithIdentity(i int not null identity(1,1) primary key,x char(1) not null unique,y char(1) not null) 

--populate the temporary table 
insert into dbo.#TempWithIdentity(x,y) select x,y from dbo.t 

--return the data 
select i,x,y from dbo.#TempWithIdentity 

--clean up 
drop table dbo.#TempWithIdentity 
0

Bạn có thể làm điều này trực tiếp trong SQL2000, theo trang của Microsoft: http://support.microsoft.com/default.aspx?scid=kb;en-us;186133

select rank=count(*), a1.au_lname, a1.au_fname 
    from authors a1, authors a2 
    where a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname 
    group by a1.au_lname, a1.au_fname 
    order by rank 

Vấn đề duy nhất với phương pháp này là (Theo Jeff nói trên SQL Server Trung ương) nó một hình tam giác tham gia. Vì vậy, nếu bạn có mười hồ sơ này sẽ được nhanh chóng, nếu bạn có một ngàn hồ sơ nó sẽ được làm chậm, và với một triệu hồ sơ nó có thể không bao giờ hoàn thành!

Xem ở đây cho một lời giải thích tốt hơn về tam giác tham gia: http://www.sqlservercentral.com/articles/T-SQL/61539/


0
Select (Select count(y.au_lname) from dbo.authors y 
where y.au_lname + y.au_fname <= x.au_lname + y.au_fname) as Counterid, 
x.au_lname,x.au_fname from authors x group by au_lname,au_fname 
order by Counterid --Alternatively that can be done which is equivalent as above.. 
11

này sẽ làm việc trong SQL Server 2008.

select top 100 ROW_NUMBER() OVER (ORDER BY tmp.FirstName) ,* from tmp 

Cheers

+1

câu hỏi là về 'sql2000' –

6

Đây là một phương pháp đơn giản xếp hạng các hàng sau khi chúng được đặt hàng, tức là được chèn vào bảng của bạn. Trong tuyên bố SELECT của bạn, chỉ cần thêm trường

ROW_NUMBER() OVER (ORDER BY CAST(GETDATE() AS TIMESTAMP)) AS RowNumber. 
Các vấn đề liên quan