SQL SERVER,SELECT语句,带有自动生成行id

时间:2008-09-26 04:40:44

标签: sql-server

有没有人碰巧记住用于生成内置SQL Server 2000的顺序行号的函数名。

8 个答案:

答案 0 :(得分:15)

如果您正在使用GUID,这应该很简单,如果您要查找整数ID,则必须等待另一个答案。

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

newId()将为您生成一个新的GUID,您可以将其用作自动生成的id列。

答案 1 :(得分:14)

这适用于SQL Server 2008。

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

干杯

答案 2 :(得分:13)

如果你正在进行选择,那么

IDENTITY(int,1,1)应该这样做。在SQL 2000中,我只是将结果放在临时表中并查询后缀。

答案 3 :(得分:13)

这是一个简单的方法,它按行排序后对行进行排名,即插入到表中。在SELECT语句中,只需添加字段

ROW_NUMBER() OVER (ORDER BY CAST(GETDATE() AS TIMESTAMP)) AS RowNumber.

答案 4 :(得分:1)

您是否希望记录集返回一个递增的整数列?如果是这样的话: -

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

答案 5 :(得分:0)

这可能是你在找什么?

  

从TABLE

中选择NEWID()*

答案 6 :(得分:0)

您可以在SQL2000中直接执行此操作,具体取决于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

这种方法的唯一问题是(正如Jeff在SQL Server Central上所说的那样)它是一个三角形连接。所以,如果你有十条记录,这将是快速的,如果你有一千条记录它会很慢,而且有一百万条记录它可能永远不会完成!

有关三角形连接的更好解释,请参见此处:http://www.sqlservercentral.com/articles/T-SQL/61539/


答案 7 :(得分: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..