PDA

View Full Version : درج اطلاعات ناشی از سکلت در یک جدول مجازی



mhamedm2008
شنبه 24 مرداد 1394, 00:37 صبح
با سلام
من یک سکلت پیچیده دارم که می خوام نتایج اون برای چاپ را در یک جدول مجازی یا داینامیک وارد کنم.
سوالم اینه که چه جوری باید جدول مجازی ایجاد کنم؟؟
آیا باید تک تک سوتن ها رو قبلش برای اون تعریف کنم یا راهی داره خودش به صورت پیش فرض با استفاده از سلکت اون ها رو بسازه
و سوم اینکه چه جوری باید نتایج سلک را در این جدول قرار بدهم
با تشکر از همه دوستان

SabaSabouhi
یک شنبه 25 مرداد 1394, 12:51 عصر
با سلام
من یک سکلت پیچیده دارم که می خوام نتایج اون برای چاپ را در یک جدول مجازی یا داینامیک وارد کنم.
سوالم اینه که چه جوری باید جدول مجازی ایجاد کنم؟؟
آیا باید تک تک سوتن ها رو قبلش برای اون تعریف کنم یا راهی داره خودش به صورت پیش فرض با استفاده از سلکت اون ها رو بسازه
و سوم اینکه چه جوری باید نتایج سلک را در این جدول قرار بدهم
با تشکر از همه دوستان

سلام
بله راه حل داره. کافیه از SELECT INTO استفاده کنی و بجای نام جدول موجود، از یک نام مجازی که با # شروع می‌شه
استفاده کنی.


SELECT Id, Name
INTO #MyTempTable
FROM MyTable

SELECT *
FROM #MyTempTable

قابل توجه این که این جدول به صورت واقعی در دیتابیس tempdb ساخته می‌شه و فقط در همین session موضوعیت داره
و با بسته شدن session به صورت خودکار حذف می‌شه. ( مثلاً بسته شدن پنجره‌ی موجود در Management Studio )
اگه بجای # از ## استفاده کنی، جدول ساخته شده با بسته شدن session حذف نمی‌شود و توسط سایر کاربران
نیز قابل مشاهده خواهد بود.

صبا صبوحی

mhamedm2008
یک شنبه 01 شهریور 1394, 21:44 عصر
این کار رو می کنم ولی با پیغام خطای مواجه می شوم
#MyTempTable Invalid Object name

SabaSabouhi
دوشنبه 02 شهریور 1394, 08:31 صبح
این کار رو می کنم ولی با پیغام خطای مواجه می شوم
#MyTempTable Invalid Object name

سلام
حتماً تو یه session دیگه استفاده کردی، تو script-ای که من نوشتم، select اول رو اصلاح کن که از جدول‌های خودت استفاده
کنه و دو فرمان رو پیاپی اجرا کن، در این صورت مشکلی نداره. اما اگه بخوای پنجره‌ی جدیدی باز کنی ( New Query ) و بخوای
اون‌جا select دوم رو اجرا کنی، چون session عوض شده دیگه به اون دسترسی نداری. اگه لازم هست در جای دیگه ازش
استفاده کنی بجای یه «#» از دوتا استفاده کن.
البته سعی کن زیاد از جدول‌های موقت استفاده نکنی. اما اگه مجبور شدی راه حلش همینه که برات نوشتم.

صبا صبوحی

mhamedm2008
دوشنبه 02 شهریور 1394, 11:25 صبح
begin
SELECT sh_master.sh_id_master, sh_master.sh_nam, sh_master.sh_family, sh_master.sh_sh, sh_master.sh_pedar, sh_master.sh_sodoor,
sh_master.sh_tavalod, sh_master.sh_taahol, sh_master.sh_mazhab, sh_master.sh_exp, sh_master.sh_shahadat_date, sh_master.sh_amaliat,
sh_master.sh_ostan_shahadat, sh_master.sh_mantaghe_shahadat, sh_master.sh_semat, sh_master.sh_add, sh_master.sh_tel, sh_master.sh_mafghood,
sh_master.sh_ostan, sh_master.sh_shahr, sh_master.sh_roosta, sh_master.sh_sen, sh_master.sh_add_file, sh_mazhab.sh_nam_mazhab, Tbl_Ostan.Title,
Tbl_Shahrestan.Title AS Expr1, Tbl_Ostan_1.Title AS Expr2, sh_amaliat_nam.sh_nam_amaliat
into ##MyTempTable
FROM sh_master LEFT OUTER JOIN
sh_amaliat_nam ON sh_master.sh_amaliat = sh_amaliat_nam.sh_id_amaliat LEFT OUTER JOIN
Tbl_Ostan AS Tbl_Ostan_1 ON sh_master.sh_ostan_shahadat = Tbl_Ostan_1.ID LEFT OUTER JOIN
Tbl_Shahrestan ON sh_master.sh_shahr = Tbl_Shahrestan.ID LEFT OUTER JOIN
Tbl_Ostan ON sh_master.sh_ostan = Tbl_Ostan.ID LEFT OUTER JOIN
sh_mazhab ON sh_master.sh_mazhab = sh_mazhab.sh_id_mazhab

where (sh_nam LIKE '%'+ isnull(@nam,sh_nam) + '%' ) AND
(sh_family LIKE '%'+ isnull(@family,sh_family) + '%' ) AND
(sh_pedar LIKE '%'+ isnull(@pedar,sh_pedar) + '%' ) AND
(sh_exp LIKE '%'+ isnull(@exp,sh_exp) + '%' ) AND
(sh_tavalod LIKE '%'+ isnull(@tt,sh_tavalod) + '%' ) AND
(sh_shahadat_date LIKE '%'+ isnull(@ts,sh_shahadat_date) + '%' ) AND
(sh_semat LIKE '%'+ isnull(@semat,sh_semat) + '%' ) AND
(sh_add LIKE '%'+ isnull(@add,sh_add) + '%' ) AND
(sh_mantaghe_shahadat LIKE '%'+ isnull(@mantaghe,sh_mantaghe_shahadat) + '%' ) AND
(sh_mazhab = isnull(@kod_mazhab,sh_mazhab)) AND
(sh_amaliat = isnull(@kod_amaliat,sh_amaliat)) AND
(sh_ostan_shahadat = isnull(@ostan_shahadat_kod,sh_ostan_shahadat)) AND
(sh_taahol = isnull(@kod_taahol,sh_taahol)) AND
(sh_mafghood = isnull(@kod_mafghood,sh_mafghood)) AND
(sh_shahr = isnull(@shahr_kod,sh_shahr)) AND
(sh_ostan = isnull(@ostan_kod,sh_ostan)) AND
(sh_sen between @sen1 AND @sen2) AND
(sh_roosta LIKE '%'+ isnull(@roosta,sh_roosta) + '%')

ORDER BY sh_master.sh_family
offset @offset_up * @RecordPerPage rows fetch first @RecordPerPage rows only
end

select * from ##MyTempTable


کد من به صورت بالا هست که اون اررور رو میده. پشت سر هم بکار بردم

mhamedm2008
چهارشنبه 04 شهریور 1394, 21:41 عصر
کسی نمی دونه مشکل از کجاست؟؟