PDA

View Full Version : اضافه شدن دستور Topدر View.



SYNDROME
پنج شنبه 21 تیر 1386, 14:16 عصر
با سلام
دوستان من یک View می نویسم و هر موقع که ذخیره می کنم دستور Top100 به اول آن اضافه می شود.
چه کار کنم این دستور اضافه نشود؟
با تشکر

niksoft
پنج شنبه 21 تیر 1386, 14:28 عصر
مگه شما به این صورت دستور View رو نمینویسی



Create View View1
As
Select *
From Table1

SYNDROME
پنج شنبه 21 تیر 1386, 16:41 عصر
مگه شما به این صورت دستور View رو نمینویسی


Create View View1
As
Select *
From Table1

دقیقاً اینجوری می نویسم ولی زمانی که OrderBy داشته باشم و بخواهم Topرا حذف کنم پیغام زیر نمایش داده می شود.


The Order By Clause IS Invalid in View , Inline Fuctions Derived Tables And Sub queries Unless Top is also Specified

مشکل از کجاست؟
با تشکر

niksoft
پنج شنبه 21 تیر 1386, 20:06 عصر
View چون رکوردها رو از جدول میگیره و مال خودش نیست فقط در صورت TOP (100) PERCENT میزاره از دستور Order استفاده کنید ولی میتونید یه جدول دیگه بسازید و با یک کرسر تمام اطلاعات View رو توش بریزید بعد رو این جدول Order کنید

SYNDROME
پنج شنبه 21 تیر 1386, 22:01 عصر
با سلام

View چون رکوردها رو از جدول میگیره و مال خودش نیست فقط در صورت TOP (100) PERCENT میزاره از دستور Order استفاده کنید

بابت توضیحتان ممنون.واقعا لطف کردید.
پس این قانون است که اگر من OrderBy استفاده کنم دستور TOP استفاده می شود و مثلا فقط 100 رکورد اول را نمایش می دهد.(آیا درست می گویم)

View
ولی میتونید یه جدول دیگه بسازید و با یک کرسر تمام اطلاعات View رو توش بریزید بعد رو این جدول Order کنید
این روش چندان درست نیست چون هر بار باید این Table پر شود و در تعداد رکوردهای بالا زمانبر است.
با تشکر فراوان

AminSobati
جمعه 22 تیر 1386, 00:16 صبح
دستور Select اصطلاحا یک Result Set برمیگردونه، یعنی یک "مجموعه". در اصطلاح زبان SQL وقتی Order By به Query اضافه شد، به نتیجه این Query یک Cursor گفته میشه، نه یک Result Set. در View اگر Order By داشته باشید و Query دیگری از این View مجددا Select انجام بده، مثل اینه که دارین از یک کرسر Query میگیرین (و امکان پذیر نیست). اما زمانی که Top اضافه میشه، یعنی چند آیتم اول از این کرسر، به شکل Set (مجموعه) بدست میاد، پس اشکالی وجود نخواهد داشت. در استاندارد SQL، همیشه Sort کردن به عهده بیرونی ترین Query هستش و استفاده از Order By در View اصولی نیست. در SQL Server 2000 اگر در View از Order By استفاده کنین، Query خارجی، اطلاعات رو مرتب شده میبینه، اما در 2005 ترتیبی که در View مشخص میشه توسط Order By، در Query بیرونی الزاما رعایت نخواهد شد. علتش این هست که زبان TSQL در 2005 به استاندارد SQL نزدیکتر شده و رفتارهای اون رو پیروی میکنه.