PDA

View Full Version : لطفا این کد رو توضیح بدهید



hosseinab
شنبه 28 مهر 1386, 08:33 صبح
من قبلا برای نوشتن کد بازگشتی از استورد پروسیجر استفاده می کرد اما این کد رو توی یه ebook دیدم



With xxx(parent, child)as(
SELECT parent, child FROM employ
WHERE parent=10031
UNION ALL
SELECT employ.parent, employ.child
FROM employ INNER JOIN xxx ON employ.parent=xxx.child
)
SELECT VCustomer_Names.CustomerName
FROM xxx AS employ_1 INNER JOIN
VCustomer_Names ON employ_1.child = VCustomer_Names.CustomerID


کاملا هم درست کار می کنه اما نی دونم چطوری کار می کنه چون اگه مثل تابع باشه باید اون parent=10031 چندین با ر چاپ بشه؟تشکر

حمیدرضاصادقیان
شنبه 28 مهر 1386, 12:54 عصر
سلام.شما میتونی درباره CTE در Books online جستجو کنید.

hosseinab
شنبه 28 مهر 1386, 13:30 عصر
درباره CTE یه چیزایی می دونم اما بازگشتیش برام مفهوم نیست

AminSobati
شنبه 28 مهر 1386, 15:34 عصر
دوست عزیزم،
یک Recursive CTE حداقل از دو Query تشکیل شده. اولی Anchor Member که فقط یکبار اجرا میشه، و دومی Recursive Member نامیده میشه و مرتبا محتویات داخل CTE رو با یک جدول دیگه Join میکنه و تا جایی این کار رو ادامه میده که دیگه Join نتیجه ای برنگردونه.
برای درک بهتر، میتونین تصور کنین Query اول نتیجه خودش رو داخل CTE که در مثال شما xxx هستش Insert میکنه. حالا Quer دوم این رکوردها رو از xxx با جدول employee باید Join کنه و نتیجه باز در xxx وارد میشه. Queryی که در بیرون از CTE قرار داره، رکوردهای جمع آوری شده در xxx رو استفاده میکنه