SQL SERVER,带有自动生成行ID的SELECT语句
时间:2020-03-06 14:45:58 来源:igfitidea点击:
是否有人记得用于生成内置SQL Server 2000的顺序行号的函数名。
解决方案
如果我们使用的是GUID,那应该很容易,如果我们要查找整数ID,则必须等待其他答案。
SELECT newId() AS ColId, Col1, Col2, Col3 FROM table1
newId()将为我们生成一个新的GUID,我们可以将其用作自动生成的id列。
这也许是我们要找的东西吗?
select NEWID() * from TABLE
如果要进行选择,则IDENTITY(int,1,1)应该这样做。在SQL 2000中,我只是将结果放在临时表中,然后查询该后记。
我们是否希望记录集返回递增的整数列?如果是这样: -
--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
我们可以按照Microsoft的页面在SQL2000中直接执行此操作:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;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/
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..