SQL SERVER, оператор SELECT с автоматической генерацией идентификатора строки - PullRequest
12 голосов
/ 26 сентября 2008

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

Ответы [ 8 ]

15 голосов
/ 26 сентября 2008

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

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

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

14 голосов
/ 20 марта 2012

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

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

Приветствия

13 голосов
/ 01 августа 2014

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

ROW_NUMBER() OVER (ORDER BY CAST(GETDATE() AS TIMESTAMP)) AS RowNumber.
13 голосов
/ 26 сентября 2008

IDENTITY (int, 1, 1) должен делать это, если вы делаете выбор в. В SQL 2000 я просто помещаю результаты во временную таблицу и запрашиваю их после слов.

1 голос
/ 26 сентября 2008

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

--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 голосов
/ 19 декабря 2008
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..
0 голосов
/ 26 сентября 2008

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


0 голосов
/ 26 сентября 2008

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

выберите NEWID () * из TABLE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...