PDA

View Full Version : چند Select در یک sp



arta.nasiri
پنج شنبه 08 اردیبهشت 1390, 20:00 عصر
سلام

میخوام تو یک sp از چندتا select استفاده کنم ولی مشکلم اینجاست که وقتی select اول رو زدم به مقدار یکی از فیلد های اون نیاز دارم تا طبق اون مقدار select دوم رو انجام بدم. و به راهنمایی نیاز دارم.

با تشکر

unique1984
پنج شنبه 08 اردیبهشت 1390, 22:00 عصر
سلام
یک راه حل ساده (نه لزوما خوب) می تونه استفاده از IN باشه.
SELECT F1,F2,F3,.. FROM T1 WHERE Condition1
SELECT * FROM T2 WHERE T2.F1 IN (SELECT F1 FROM T1 WHERE Condition1)

arta.nasiri
پنج شنبه 08 اردیبهشت 1390, 22:16 عصر
ممنون

مشکل من اینه!.

یک جدول اصلی دارم که دارای محتویاتی هست که باید با توجه به محتویات اون رکوردهایی رو از جدول های دیگه select کنم و تعداد جدول ها 5 یا 6 تا هست و در آخر باید اون رکوردهای انتخاب شده رو با برنامه برگردونم.

میخوام موقع اجرای sp محتویات جدول اصلی رو بخونم و داخل متغییر نگه دارم سپس از اونا تو شرط اون یکی select ها استفاده کنم.

با تشکر

arta.nasiri
جمعه 09 اردیبهشت 1390, 16:02 عصر
کسی نیست ؟

pezhvakco
جمعه 09 اردیبهشت 1390, 17:57 عصر
یک جدول اصلی دارم که دارای محتویاتی هست که باید با توجه به محتویات اون رکوردهایی رو از جدول های دیگه select کنم و تعداد جدول ها 5 یا 6 تا هست و در آخر باید اون رکوردهای انتخاب شده رو با برنامه برگردونم.
میخوام موقع اجرای sp محتویات جدول اصلی رو بخونم و داخل متغییر نگه دارم سپس از اونا تو شرط اون یکی select ها استفاده کنم.با تشکر
سلام :
درست نفهمیدم چی می خوایین . این و اون رو مفهوم تر بگین تا سریع تر به پاسخ برسین .
ولی اگه منظور شما از " محتویات جدول اصلی رو بخونم و داخل متغییر نگه دارم " نگه داری ردیف های جدول است می تونین در Sp به تعداد دلخواه جدول موقت بسازین و ردیف های مورد نظر رو در اون ها نگه داری نمایید :
DECLARE @T TABLE (Radif INT IDENTITY, Col1 INT, Col2 VARCHAR(10), Col3 INT)

INSERT INTO @T (Radif INT IDENTITY, Col1 INT, Col2 VARCHAR(10), Col3 INT)
SELECT Cool1, Cool2, Cool3,
FROM Table1
WHERE ...

arta.nasiri
جمعه 09 اردیبهشت 1390, 18:19 عصر
سلام

میخوام اول یکی از جدول ها رو select کنم بعد محتوای اون رو که فقط حاوی یک رکورد هست رو یجایی تو sp نگه دارم

بعد بیام چندتا select دیگه بزنم ولی این select ها مقدار شرطشون رو باید از جدول اولی که select کردیم بگیرین.

pezhvakco
جمعه 09 اردیبهشت 1390, 18:23 عصر
میخوام اول یکی از جدول ها رو select کنم بعد محتوای اون رو که فقط حاوی یک رکورد هست رو یجایی تو sp نگه دارم
فکر کنم همون کدی که نوشتم برای همین کار مناسب باشه . یک ردیف که دارای چند ستون است، یک متغییر نیست .

" یجایی تو sp نگه دارم " : Sp جا نداره .

اگه شما اون جدول موقت را بسازین، مس تونین با اون مانند دیگر جدول ها کار کنین ...

unique1984
جمعه 09 اردیبهشت 1390, 18:28 عصر
سلام .
اگه سلکتی که روی جدول اصلی دارین یک رکورد بر میگردونه می تونین به روش زیر عمل کنین.

DECLARE @F1 INTEGER , @F2 INTEGER , @F3 INTEGER

SELECT @F1 = F1 , @F2 = F2 , @F3 = F3
FROM TBlMain
WHERE ....
--------------------------------
SELECT *
FROM Tbl1
WHERE FId1 = @F1
------
SELECT *
FROM Tbl2
WHERE FId2 = @F2
------
SELECT *
FROM Tbl3
WHERE FId3 = @F3

arta.nasiri
جمعه 09 اردیبهشت 1390, 18:28 عصر
فکر کنم همون کدی که نوشتم برای همین کار مناسب باشه . یک ردیف که دارای چند ستون است، یک متغییر نیست .

" یجایی تو sp نگه دارم " : Sp جا نداره .

اگه شما اون جدول موقت را بسازین، مس تونین با اون مانند دیگر جدول ها کار کنین ...

ممنون دوست عزیز.

حالا چطوری به مقادیر اون جدول موقت دسترسی پیدا کنم ؟ ( شرمنده ها زیاد با sql کار نکردم )

pezhvakco
جمعه 09 اردیبهشت 1390, 18:41 عصر
حالا چطوری به مقادیر اون جدول موقت دسترسی پیدا کنم
جدول های موقت در یک Sp مانند دیگر جدول ها دارای نام مشخص و ستون های مشخص هستند ...
DECLARE @T TABLE (Radif INT IDENTITY, Col1 INT, Col2 VARCHAR(10), Col3 INT)

INSERT INTO @T (Radif INT IDENTITY, Col1 INT, Col2 VARCHAR(10), Col3 INT)
SELECT Cool1, Cool2, Cool3,
FROM Table1
WHERE ...

SELECT Col1, Col2
FROM @T
WHERE Radif = 1 AND ...

SELECT ...
FROM Table_2
WHERE Table_2.Coool1 in (SELECT Col1 FROM @T WHERE @T.Col2 LIKE 'YOU')

arta.nasiri
جمعه 09 اردیبهشت 1390, 19:26 عصر
ببخشید یک سوال دیگه! البته خیلی مبتدی هست ولی دیگه چیکار میشه کرد.

الان من تو sp چهار تا select زدم ولی فقط مقدار select اول رو برمیگردونه.

pezhvakco
جمعه 09 اردیبهشت 1390, 19:35 عصر
یه پیشنهاد : ابتدا سعی کنین در مورد Sp (چی هستند، کجا بکار می آیند، چگ.نه با اون ها ارتباط بر قرار کنیم، ورودی و خروجی اون ها چی هست و ...) مطالعه نمایید و سپس د رهمین سایت جستجو نمایید ...

الان من تو sp چهار تا select زدم ولی فقط مقدار select اول رو برمیگردونه.
کجا بر می گردونه ؟
اگه منظور شما در خروجی است، خوب این قانون رویه ها بوده ...

arta.nasiri
جمعه 09 اردیبهشت 1390, 19:44 عصر
به برنامه دیگه!

من تو sp چهارتا select زدم ولی فقط مقادیر select اول رو به برنامه برمیگردونه. وسط هر select از union استفاده کردم ولی ارور میده

arta.nasiri
جمعه 09 اردیبهشت 1390, 20:42 عصر
یعنی این امکان نیست که مقادیر 4 تا select رو باهام به برنامه برگردونیم ؟

unique1984
شنبه 10 اردیبهشت 1390, 11:56 صبح
چرا که نه!
مشخص نکردین نتایج این sp رو در چه برنامه ای دارین استفاده می کنین . در هر صورت ، تمام نتایج برمیگرده منتها باید ببینین توی محیط برنامه نویسیتون به چه صورت باهاشون کار کنین.
در مورد union هم باید یکسری موارد رو رعایت کنین . بعنوان مثال باید تعداد ستون های بازگشتی هر سلکت و نوعشون یکسان باشند .