2008-09-26 10 views
10

किसी समारोह उत्पन्न करने के लिए अनुक्रमिक पंक्ति संख्या में निर्मित एसक्यूएल सर्वर इस्तेमाल किया नाम याद करने के लिए होता है 2000एसक्यूएल सर्वर, ऑटो के साथ SELECT कथन पंक्ति आईडी उत्पन्न

उत्तर

10

आप GUIDs के उपयोग यह अच्छा होना चाहिए बना रहे हैं और आसान, अगर आप एक पूर्णांक आईडी की तलाश में हैं, तो आपको एक और जवाब का इंतजार करना होगा।

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

newId() आपके लिए एक नई GUID उत्पन्न होगा कि आप अपने स्वचालित रूप से उत्पन्न आईडी स्तंभ के रूप में उपयोग कर सकते हैं।

+0

मुझे जो चाहिए वह छोटा और मीठा। –

1

क्या यह शायद आप क्या देख रहे हैं?

चयन NEWID() * मेज से

13

पहचान (पूर्णांक, 1, 1) यह क्या करना चाहिए अगर आप में एक का चयन कर रहे हैं। SQL 2000 में, मैं केवल परिणामों को एक temp तालिका में डालता हूं और बाद में क्वेरी करता हूं।

+0

धन्यवाद! ये वही है जिसे मैं ढूंढ रहा था। (आपके पास एक टाइपो है, यह "पहचान (int, 1, 1)" होना चाहिए।) –

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 
0

आप प्रति माइक्रोसॉफ्ट के पृष्ठ के रूप में SQL2000 में सीधे यह कर सकते हैं,: 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 

इस दृष्टिकोण के साथ ही समस्या यह है कि (जेफ एसक्यूएल सर्वर सेंट्रल पर कहते हैं) यह है एक त्रिकोणीय शामिल हो। इसलिए, यदि आपके पास दस रिकॉर्ड हैं तो यह तेज़ होगा, अगर आपके पास हजारों रिकॉर्ड हैं तो यह धीमा हो जाएगा, और लाखों रिकॉर्ड के साथ यह कभी पूरा नहीं हो सकता है!

त्रिकोणीय का एक बेहतर विवरण के लिए यहाँ देखें मिलती है: http://www.sqlservercentral.com/articles/T-SQL/61539/


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

इस 2008.

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

चीयर्स एसक्यूएल सर्वर में काम करेंगे

+1

प्रश्न 'sql2000' के बारे में है –

6

यहाँ एक सरल तरीका है जो पंक्तियों को रैंक करते हैं, हालांकि उन्हें आदेश दिया जाता है, यानी आपकी मेज में डाला जाता है। अपने SELECT कथन में बस फ़ील्ड

ROW_NUMBER() OVER (ORDER BY CAST(GETDATE() AS TIMESTAMP)) AS RowNumber. 
संबंधित मुद्दे