Кто-нибудь помнит имя функции, используемое для генерации последовательного номера строки встроенного SQL Server 2000.
SQL SERVER, инструкция SELECT с автоматическим генерировать идентификатор строки
Ответ 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..