ورود

View Full Version : سوال: ()ROW_NUMBER در sql 2000



reza_moon_mordad
سه شنبه 21 مهر 1388, 11:05 صبح
آیا روشی شبیه به تابع ()ROW_NUMBER در sql 2000 وجود داره؟
ممنون میشم اگه توضیح بدین.:لبخندساده:

محمد سلیم آبادی
سه شنبه 21 مهر 1388, 11:45 صبح
بسته به این که چه استفاده ای از این تابع می خواهین بکنین راه حل های جایگزینی (Alternative) وجود دارد.

مثلا با کمک تابع Identity_into می توانین به هر یک از سطرهای جدول یک شماره دهین.
یا با کمک Cursor می توانین یک کارهایی انجام دهین.

Kamyar.Kimiyabeigi
سه شنبه 21 مهر 1388, 13:20 عصر
سعي كنين ازcursor اصلا استفاده نكنين

FSarab
چهارشنبه 22 مهر 1388, 18:18 عصر
select (select count(*) from TableName where (PrimaryKey <= c.PrimaryKey)) as RowNum, *
from TableName c
order by PrimaryKey

reza_moon_mordad
پنج شنبه 23 مهر 1388, 08:27 صبح
سعي كنين ازcursor اصلا استفاده نكنين

دلیلش رو میشه ذکر کنید.

محمد سلیم آبادی
پنج شنبه 23 مهر 1388, 09:20 صبح
دلیلش رو میشه ذکر کنید.

Cursor در واقع هر سطر را جدا گانه استخراج و بازیابی (Fetch) می کند که هر کدام یک Query محسوب می شوند. به همین علت می تواند هزینه ی زیادی برای سیستم داشته باشد.

ولی در بعضی از موارد راه حل های Cursor-Based حتی خیلی بهتر از Set-based است!

در مورد سوال شما روش Identity سریعترین روش است.



Select *, RowID=Identity(1,1)
Into New_Table
From Your_Table

reza_moon_mordad
پنج شنبه 23 مهر 1388, 09:42 صبح
بسته به این که چه استفاده ای از این تابع می خواهین بکنین راه حل های جایگزینی (Alternative) وجود دارد.

مثلا با کمک تابع Identity_into می توانین به هر یک از سطرهای جدول یک شماره دهین.
یا با کمک Cursor می توانین یک کارهایی انجام دهین.

ممنون از پاسختون
می خوام به هر سطری یک id اختصاص بدم و جهت (paging,sorting,...) از اون id استفاده کنم.

محمد سلیم آبادی
پنج شنبه 23 مهر 1388, 09:56 صبح
تابع Row_Number یک قابلیتی به نام Partition دارد که قدرت این تابع را افزایش می دهد. منظورم این بود که مثلا از این قابلیت هم می خواهین استفاده کنین، یعنی دنبال یک راه حل جایگزین کاملا برابر و یکسان (equivalent method) هستین.

ولی با این توضیحات به نظر می رسه بهترین گزینه این است که از تابع Identity استفاده کنین و نتیجه را در یک جدول موقت (Temporary) ذخیره کنین.

البته با SubQuery هم می توانین این کار را انجام دهین ولی نیاز به Query های پیشرفته ای دارین (فرض کنین جدول شما کلید اصلی ندارد و داده های تکراری دارین....)

برای اطلاعات در این مورد می توانین کتاب Inside Microsoft SQL Server T-SQL Querying رو مطالعه کنین فصل مربوط به Ranking Function.