PDA

View Full Version : درخواست کمک برای بهتر کردن کد یک پروسیجر



tehran11
چهارشنبه 23 فروردین 1391, 19:13 عصر
با سلام خدمت همه دوستان

من تو یه دیتابیس چند تا تیبل دارم که مشخصات مختلفی مرتبط با یه تیبل دیگه دارن، که میخوام همه مشخصات مشترک مربوط به یه آیتمو در کنار هم نشون بدم
چیزی که به نظرم رسید این بود که سه تا دستور select رو با هم union کنم و نمایش بدم، اما چون union و join رو با هم نتونستم پیاده کنم (حالا نمیدونم نمیشه یا من نتونستم انجامش بدم) و به شکل زیر طراحیش کردم.
سه تا خروجی رو تو سه تا تیبل موقتی میریزم، بعدش اون سه تا تیبلو با هم union کردم.

میخوام که دوستان ببیننش و روش یه نظری بدن که آیا راه بهتری برای پیاده سازیش وجود داره یا نه؟ چون فکر میکنم جداول موقتی راه اصولی برای استفاده در دیتابیس نیستند.

البته دیتابیس نمونه رو هم گذاشتم با یه سری اطلاعات و جداول نمونه (فرضی)

ALTER PROCEDURE [dbo].[GetTotalVal]
(
@pID int
)
AS

IF OBJECT_ID ('dbo.#temp1', 'U') IS NOT NULL
DROP TABLE dbo.#temp1;

IF OBJECT_ID ('dbo.#temp2', 'U') IS NOT NULL
DROP TABLE dbo.#temp2;

IF OBJECT_ID ('dbo.#temp3', 'U') IS NOT NULL
DROP TABLE dbo.#temp3;

SELECT dbo.main.name +' ' + dbo.main.family as 'name', 'fax' as 'table_name', dbo.fax.fax as 'number'
INTO dbo.#temp1
FROM dbo.main RIGHT OUTER JOIN
dbo.fax ON dbo.main.ID = dbo.fax.mainID
WHERE (dbo.fax.mainID = @pID)

SELECT dbo.main.name +' ' + dbo.main.family as 'name', 'tel' as 'table_name', dbo.tel.tel as 'number'
INTO dbo.#temp2
FROM dbo.main RIGHT OUTER JOIN
dbo.tel ON dbo.main.ID = dbo.tel.mainID
WHERE (dbo.tel.mainID = @pID)

SELECT dbo.main.name +' ' + dbo.main.family as 'name', 'phone' as 'table_name', dbo.phone.phone as 'number'
INTO dbo.#temp3
FROM dbo.main RIGHT OUTER JOIN
dbo.phone ON dbo.main.ID = dbo.phone.mainID
WHERE (dbo.phone.mainID = @pID)

SELECT dbo.#temp1.name, dbo.#temp1.table_name, dbo.#temp1.number
FROM #temp1
UNION
SELECT dbo.#temp2.name, dbo.#temp2.table_name, dbo.#temp2.number
FROM #temp2
UNION
SELECT dbo.#temp3.name, dbo.#temp3.table_name, dbo.#temp3.number
FROM #temp3
ORDER by table_name

IF OBJECT_ID ('dbo.#temp1', 'U') IS NOT NULL
DROP TABLE dbo.#temp1;

IF OBJECT_ID ('dbo.#temp2', 'U') IS NOT NULL
DROP TABLE dbo.#temp2;

IF OBJECT_ID ('dbo.#temp3', 'U') IS NOT NULL
DROP TABLE dbo.#temp3;

mahan.2002
چهارشنبه 23 فروردین 1391, 20:36 عصر
سلام
دوست عزیز اگر هدف تون از کوئری رو می گفتید شاید بهتر بود ن فایل ضمیمه تون هم دانلود کردم ولی چیزی نبود باز نمی شد فایل درونش ..

mahan.2002
چهارشنبه 23 فروردین 1391, 23:42 عصر
می بخشید من روی سیستم Sql server نصب نبود. فایل داخل موجوده ولی باز نمی شد متوجه نبودم ...
ولی اگر بنظرم باز هدف تون از کوئری رو بگید فکر می کنم بهتر باشه..

tehran11
پنج شنبه 24 فروردین 1391, 09:34 صبح
سلام
دوست عزیز اگر هدف تون از کوئری رو می گفتید شاید بهتر بود ن فایل ضمیمه تون هم دانلود کردم ولی چیزی نبود باز نمی شد فایل درونش ..

فایل داخل موجوده ولی باز نمی شد متوجه نبودم

ولی اگر بنظرم باز هدف تون از کوئری رو بگید فکر می کنم بهتر باشه..

:متفکر:
دوست عزیز، ای کاش بجای ارسال دو تا پست دو خطی که خیلی چیزاشم تکراری بود؛ متن پست اول رو کامل میخوندی و فایلی که دانلود کردی هم فقط با یه ویرایشگر متنی بازش میکردی :چشمک:


میخوام که دوستان ببیننش و روش یه نظری بدن که آیا راه بهتری برای پیاده سازیش وجود داره یا نه؟ چون فکر میکنم جداول موقتی راه اصولی برای استفاده در دیتابیس نیستند.