آیا روشی شبیه به تابع ()ROW_NUMBER در sql 2000 وجود داره؟
ممنون میشم اگه توضیح بدین.
آیا روشی شبیه به تابع ()ROW_NUMBER در sql 2000 وجود داره؟
ممنون میشم اگه توضیح بدین.
بسته به این که چه استفاده ای از این تابع می خواهین بکنین راه حل های جایگزینی (Alternative) وجود دارد.
مثلا با کمک تابع Identity_into می توانین به هر یک از سطرهای جدول یک شماره دهین.
یا با کمک Cursor می توانین یک کارهایی انجام دهین.
وبلاگ من (Advanced SQL Querying)
سعي كنين ازcursor اصلا استفاده نكنين
select (select count(*) from TableName where (PrimaryKey <= c.PrimaryKey)) as RowNum, *
from TableName c
order by PrimaryKey
Cursor در واقع هر سطر را جدا گانه استخراج و بازیابی (Fetch) می کند که هر کدام یک Query محسوب می شوند. به همین علت می تواند هزینه ی زیادی برای سیستم داشته باشد.
ولی در بعضی از موارد راه حل های Cursor-Based حتی خیلی بهتر از Set-based است!
در مورد سوال شما روش Identity سریعترین روش است.
Select *, RowID=Identity(1,1)
Into New_Table
From Your_Table
وبلاگ من (Advanced SQL Querying)
تابع Row_Number یک قابلیتی به نام Partition دارد که قدرت این تابع را افزایش می دهد. منظورم این بود که مثلا از این قابلیت هم می خواهین استفاده کنین، یعنی دنبال یک راه حل جایگزین کاملا برابر و یکسان (equivalent method) هستین.
ولی با این توضیحات به نظر می رسه بهترین گزینه این است که از تابع Identity استفاده کنین و نتیجه را در یک جدول موقت (Temporary) ذخیره کنین.
البته با SubQuery هم می توانین این کار را انجام دهین ولی نیاز به Query های پیشرفته ای دارین (فرض کنین جدول شما کلید اصلی ندارد و داده های تکراری دارین....)
برای اطلاعات در این مورد می توانین کتاب Inside Microsoft SQL Server T-SQL Querying رو مطالعه کنین فصل مربوط به Ranking Function.
وبلاگ من (Advanced SQL Querying)