PDA

View Full Version : يافتن table اي که view از روي اون ساخته شده



bftarane
یک شنبه 01 اردیبهشت 1392, 21:01 عصر
سلام.
http://www.codeproject.com/Articles/127726/Introduction-to-Sql-Server-Views
من در لينک بالا اين دستورات که ميان و يک view رو از يک table مي سازن خوندم


Create View Viewname As Select Column1, Column2 From Tablename Where (Condition) Group by (Grouping Condition) having (having Condition)
مي خواستم بدونم آيا هميشه يک ويو از روي يک يا چند جدول ساخته ميشه؟ يعني هميشه روال به همين صورته يا ممکنه به طور مستقل هم view بدون اينکه جدول ديگه اي در کار باشه ساخته بشه؟
ديگه اينکه آيا insert ممکنه مستقيماً در View صورت بگيره؟
................
ببينيد من تا حالا با View ها کار نکرده بودم امروز کاري به من واگذار شده به اين صورت که
در يک صفحه انتظار مي ره وقتي سال مثلاً 1389 در تکست باکس وارد شد اطلاعاتي که مربوط به اون ساله نشون داده بشه.
به من اطلاع دادن که نشون داده نميشه (در قسمت گزارشات ساليانه) ولي من با بررسي متوجه شدم که اطلاعات دارن از يه View خونده ميشن و وقتي يه سال مثلاً 1386 که در ويو بود رو در تکست باکس وارد کردم ديدم که اطلاعات به درستي نمايش داده ميشن بنابراين احتمال مي دم که دليل اينکه اطلاعات نشون داده نمي شن شايد اين باشه که اصلاً درج به درستي صورت نمي گيره
ولي هر چي مي گردم نمي تونم بفهمم اطلاعات در چه صفحه اي دارن درج ميشن يا در چه جدولي
تا شايد از اين طريق به ريشه مشکل که چرا اطلاعات نشون داده نميشن پي ببرم
........................
البته الآن که رسيدم خونه و مطالعه کردم به اين نتيجه رسيدم که پشت هر view حتماً يه جدول وجود داره. آيا نتيجه گيريم درسته؟
اگه اين طور باشه با يه script table as>Alter to مي تونم بفهمم جدول مورد نظر کدومه.

دليل اينکه اين همه طولاني پرسيدم اينه که مي خوام همه شرايط رو پيش بيني کنم تا بتونم فردا راحتتر کارم رو در زمان کمتري انجام بدم.

یوسف زالی
یک شنبه 01 اردیبهشت 1392, 22:30 عصر
سلام.
در خصوص ویو ها پستی گذاشته بودم که الان پیداش نکردم. بگردید هست.

ویو می تونه از روی جدول باشه، از روی ویو باشه، یا از روی تابع...
اجباری به جدول داشتن در ویو نیست.
شما به هیچ وجه نمی تونید در ویو اصلاح اطلاعات انجام بدید.

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

ferdin
یک شنبه 01 اردیبهشت 1392, 22:34 عصر
سلام

توی View امکان درج وجود نداره ، در واقع View یک نمایی است که می تونید از داده های یک و یا چند تا Table و یا Viewهای دیگر داشته باشید و یا حتی می تونید از Table Value Function استفاده کنید ، حتی توی Table Value Function هم امکان درج وجود ندارد.

اگه می خواهید بدونید که داخل یک View از چی تشکیل شده همونطور که خودتون گفتید از Script View As => Alter To New Query استفاده کنید.

یوسف زالی
یک شنبه 01 اردیبهشت 1392, 22:36 عصر
پیدا شد.

http://barnamenevis.org/showthread.php?299599-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-(%D8%A7%D8%B3%D8%AA%D8%A7%D8%AA%DB%8C%DA%A9-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D9%85%D9%88%D9%82%D8%AA%DB%8C-..)&highlight=%D8%A7%D9%86%D9%88%D8%A7%D8%B9+%D8%AC%D8 %AF%D8%A7%D9%88%D9%84

ASKaffash
دوشنبه 02 اردیبهشت 1392, 07:04 صبح
سلام
این جمله که View فقط خواندنی است اساسا غلط است و بصورت پیش فرض قابل تغییر محتوای فیلدها است فقط براساس دسترسی می توان آن را فقط خواندنی کرد بصورت پیش فرض کاملا Insert و Delete و Update برای آن متصور است

bftarane
دوشنبه 02 اردیبهشت 1392, 07:26 صبح
یه سوال دیگه.
اگه یه view از روی جدولی ساخته شده باشه وقتی در اون جدول داده درج بشه مجدداً آیا ویو خود به خود آپدیت میشه؟ یا ما باید کار خاصی دوباره انجام بدیم؟

ASKaffash
دوشنبه 02 اردیبهشت 1392, 07:38 صبح
سلام
ویو مستقیم اطلاعات را براساس ستونهای قابل دسترسی به جدول به روز می کند و مثل این است که شما دستور Insert به جدول ارسال کرده اید و هیچ عمل دیگری نیاز نیست

یوسف زالی
دوشنبه 02 اردیبهشت 1392, 10:35 صبح
جالب بود. یادمه اصلا نمی شد روی ویو ها آپدیت انجام داد.
حالا در مستندات 2008:


There are no restrictions on querying through views and few restrictions on modifying data through them.


فکر می کنم از ویژگی های جدید باشه.

ویژگی ها و محدودیت های ویو:

http://msdn.microsoft.com/en-us/library/ms180800(v=sql.90).aspx
http://msdn.microsoft.com/en-us/library/aa933146(v=sql.80).aspx

ASKaffash
سه شنبه 03 اردیبهشت 1392, 06:53 صبح
سلام
از نسخه 7 نیز وجود داشته است

حمیدرضاصادقیان
چهارشنبه 04 اردیبهشت 1392, 22:44 عصر
سلام
درمورد View ها این مطلب رو یادآوری کنم.
ما یک گزینه به نام Updatable View (http://msdn.microsoft.com/en-us/library/ms187956.aspx) داریم.
شما در حالت معمولی میتونید روی View عملیات CRUD رو انجام بدید.
اگر View فقط به یک جدول وابسته باشه نیاز به تغییرات خاصی نیست.
ولی اگر در View از join استفاده شده باشه اینجا عملیات CRUD مقداری با محدودیت انجام میشه که میان روی View یک Instead of Trigger ایجاد میکنند.
در واقع یکی از کاربردهای این نوع View ، ایجاد سطح دسترسی هست که کاربر بدون اینکه مستقیم با جدول در ارتباط باشه فقط بتونه رکوردهای مورد نظری که خودش ایجاد کرده رو تغییر بده.