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;
من تو یه دیتابیس چند تا تیبل دارم که مشخصات مختلفی مرتبط با یه تیبل دیگه دارن، که میخوام همه مشخصات مشترک مربوط به یه آیتمو در کنار هم نشون بدم
چیزی که به نظرم رسید این بود که سه تا دستور 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;