View Full Version : حرفه ای: جستجو در کل دیتابیس
saeed_r67
سه شنبه 06 مهر 1389, 17:59 عصر
سلام خدمت همه اساتید محترم .
چه جوری میشه کل دیتابیس رو سرچ کرد.
مثلا تو یه دیتابیس 50 تا TABLE داریم و میخواهیم اسنادی که کاربر با کد کاربری 30 انجام داده پیدا کنیم.
دستور UNIOL ALL هم خوبی ولی دستور کلی باشه راحت تره .
ممنون از همه تون
aghayex
سه شنبه 06 مهر 1389, 21:35 عصر
نگاه کن دوست عزیز این نحوه چینش اطلاعات یک شخص که در 50 تیبل پخش شده کاملا اشتباه هست اما میتونی از یه view کنی
saeed_r67
سه شنبه 06 مهر 1389, 21:51 عصر
نگاه کن دوست عزیز این نحوه چینش اطلاعات یک شخص که در 50 تیبل پخش شده کاملا اشتباه هست اما میتونی از یه view کنی
شما برای اینکه متوجه شی که فلان فاکتور توسط چه کسی ثبت شده باید کد کاربری شو تو همون ردیف ثبت کنی .
شما راه دیگری بلدی دریغ نفرمایید.
mohsensaghafi
سه شنبه 06 مهر 1389, 22:13 عصر
سلام دوست عزیز.
اگر اطلاعات در 50 جدول متفاوت پراکنده شدن، حتما دلیلی داشته، پس بنا به اون دلیل چرا شما می خوای اطلاعات هر 50 تا رو با هم نشون بدی. اگر هم اطلاعات رو می خوای با هم نشون بدی پس همشون از یک جنس هستن. پس چرا تو 50 جدول متفاوت ذخیره شون کردی؟!
saeed_r67
سه شنبه 06 مهر 1389, 22:20 عصر
سلام دوست عزیز.
اگر اطلاعات در 50 جدول متفاوت پراکنده شدن، حتما دلیلی داشته، پس بنا به اون دلیل چرا شما می خوای اطلاعات هر 50 تا رو با هم نشون بدی. اگر هم اطلاعات رو می خوای با هم نشون بدی پس همشون از یک جنس هستن. پس چرا تو 50 جدول متفاوت ذخیره شون کردی؟!
سلام .
فرض کنید دو TABLE داریم به نام های خرید و فروش داریم .
خوب کاربری با کد 30 امروز 3 تا فاکتور خرید صادر می کنه و بعد از دو روز 5 فاکتور خرید صادر می کنه .خوب هم تو فیلد جدول خرید کد کاربر می خوره هم تو جدول فروش .
الان می خوایم از کد کاربری 30 گزارش بگیریم که چه فاکتور هایی صادر کرده . پس نیاز داریم به جستجو در هر دو جدول بانک.با دستور UNION ALL میشه و لی من دنبال سرچ تو کل دیتا بیس هستم.
ممنون از همتون که توجه کردید
aghayex
چهارشنبه 07 مهر 1389, 06:11 صبح
آخه سوالتون یه کم گنگه .
طوری که من فهمیدم شما انتظار دارید دستوری باشه که به جای اینکه بگید تیبل 1 ، تیبل 2 و ... بگید کل دیتابیس ، که من تا حالا با چنین چیزی برخورد نکردم اگه میخاید اطلاعاتتون از چند تیبل همه برن داخل سه ستون که همون union خوبه اگه نه اطلاعاتتون از چند تیبل رو طبق ستون های خودشون میخوای نمایش بدی از چهار حالت join استفاده کن
Reza_Yarahmadi
چهارشنبه 07 مهر 1389, 09:11 صبح
كار نشد نداره!! يك مقدار دردسر داره ولي فكر كنم شدني باشه ميتونيد اول مشخصات تمام جدول ها رو با دستور زير بدست بياريد
select * from sys.objects where type = 'U' بعد توي يك حلقه براي هر جدول با دستوري مثل دستور زير ميتونيد اسم فيلدهاي جدول رو بدست بياريد
select * from sys.columns Where Object_id = 2067447085 اگر فيلد(ها) مورد نظرتون توي جدول بود دستور Select روي اين جدول رو توي متغير رشته اي بريزيد. براي بقيه جدول ها هم همين كار رو انجام بديد در صورت نياز به جستجو روي جدول دستورات Select بعدي رو به همون رشته اضافه كنيد و در آخر رشته حاوي دستورات Select رو اجرا كنيد.
Declare @Str varchar(max) Set @Str = '' While(...) begin ... Set @Str = @Str + 'Select * From ' + @TableName + ' Where ... union all' ... end if(@Str '') EXEC @Str ولي در كل بهتر اينه كه تا جايي كه ممكنه بانك را طوري طراحي كنيد نياز به اين كارها نباشه
mohsensaghafi
چهارشنبه 07 مهر 1389, 11:27 صبح
سلام .
فرض کنید دو TABLE داریم به نام های خرید و فروش داریم .
خوب کاربری با کد 30 امروز 3 تا فاکتور خرید صادر می کنه و بعد از دو روز 5 فاکتور خرید صادر می کنه .خوب هم تو فیلد جدول خرید کد کاربر می خوره هم تو جدول فروش .
الان می خوایم از کد کاربری 30 گزارش بگیریم که چه فاکتور هایی صادر کرده . پس نیاز داریم به جستجو در هر دو جدول بانک.با دستور UNION ALL میشه و لی من دنبال سرچ تو کل دیتا بیس هستم.
ممنون از همتون که توجه کردید
سلام دوست عزیز.
تو همچین شرایطی بهتره که یه جدول بگیری و با یک فیلد نوع تراکنش ها رو مشخص کنی.
واسه کاری که شما می خوای انجام بدی به نظرم Union از همه بهتر باشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.