sql server एसक्यूएल सर्वर, स्वत: उत्पन्न पंक्ति आईडी के साथ चयन कथन




sql-server (8)

क्या किसी को यादृच्छिक पंक्ति नंबर निर्मित SQL Server 2000 उत्पन्न करने के लिए उपयोग किए गए फ़ंक्शन नाम को याद किया जाता है?

https://code.i-harness.com


आप इसे सीधे 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/


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

चयन करें NEWID () * तालिका से


यदि आप GUID का उपयोग कर रहे हैं तो यह अच्छा और आसान होना चाहिए, यदि आप एक पूर्णांक आईडी की तलाश कर रहे हैं, तो आपको दूसरे उत्तर की प्रतीक्षा करनी होगी।

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

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


पहचान (इंट, 1, 1) ऐसा करना चाहिए, यदि आप किसी चयन में कर रहे हैं SQL 2000 में, मैं सिर्फ परिणामों को एक अस्थायी तालिका में डालता हूं और क्वेरी करता हूं कि afterwords


यह SQL Server 2008 में काम करेगा

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

चियर्स


क्या आप चाहते हैं कि आपके रिकॉर्डसेट के साथ एक वृद्धिशील पूर्णांक कॉलम वापस आया? यदि ऐसा है तो: -

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

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

यहां एक सरल विधि है, जो इन्हें आदेश दिए जाने के बाद पंक्तियों में शुमार है, अर्थात आपकी तालिका में डाला गया है। आपके चयन कथन में केवल फ़ील्ड जोड़ें

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






sql-server