SQL SERVER, инструкция SELECT с автоматическим генерировать идентификатор строки

Кто-нибудь помнит имя функции, используемое для генерации последовательного номера строки встроенного SQL Server 2000.

Ответ 1

Если вы используете GUID, это должно быть красивым и легким, если вы ищете целочисленный идентификатор, вам придется подождать еще один ответ.

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

Функция newId() создаст для вас новый GUID, который вы можете использовать в качестве автоматически созданного столбца идентификатора.

Ответ 2

ИДЕНТИФИКАЦИЯ (int, 1, 1) должна делать это, если вы делаете выбор. В SQL 2000 я использую, чтобы просто поместить результаты в таблицу temp и запросить эти слова.

Ответ 3

Это будет работать в SQL Server 2008.

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

Приветствия

Ответ 4

Вот простой метод, который оценивает строки после того, как они упорядочены, т.е. вставлены в вашу таблицу. В инструкции SELECT просто добавьте поле

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

Ответ 5

Возможно, это то, что вы ищете?

выберите NEWID() * из таблицы

Ответ 6

Вы хотите, чтобы возвращаемый целочисленный столбец возвращался с вашим набором записей? Если да: -

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

Ответ 7

Вы можете сделать это непосредственно в 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

Единственная проблема с этим подходом заключается в том, что (как говорит Джефф в SQL Server Central) это треугольное соединение. Итак, если у вас десять записей, это будет быстро, если у вас будет тысяча записей, это будет медленным, и с миллионом записей он никогда не завершится!

См. здесь для лучшего объяснения треугольных объединений: http://www.sqlservercentral.com/articles/T-SQL/61539/


Ответ 8

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