View Full Version : اجرای یک پروسیجر داخل یکی دیگه
ealireza
جمعه 24 فروردین 1386, 23:29 عصر
سلام
من یک جدول دارم که با یک پروسیجر میام اونو صفحه بندی میکنم
یعنی خروجی پروسیجر یک تیبل هست که نهایتا سلکت میشه که فقط شامل ID هست
حالا میخام داخل یک پروسیجر جدید بصورت زیر ازش استفاده کنم
SELECT * FROM [table] WHERE id IN (exec mypager @page=2)
متعسفانه از این فرمان EXE مر خطا میگیره
اینا دوتا تیبل مجزا از هم هستن و فقط یک Foreign key دارن
فکر کنم استفاده از InnerJoin شدیدا PERFORMANCE رو کم کنه برای جدول من
لطفا یک راهی پیشنهاد کنین که بتونم خروجی پروسیجرم رو وارد SELECT کوئری دوم کنم
مرسی
DonetKarvb
شنبه 25 فروردین 1386, 00:27 صبح
شما میخوای عمل paging رو انجام بدی؟
mjdeveloper
شنبه 25 فروردین 1386, 00:28 صبح
[QUOTE=ealireza;327242]سلام
من یک جدول دارم که با یک پروسیجر میام اونو صفحه بندی میکنم
بهتره کد پروسیجر
mypager
رو بیاری توی پروسیجر اول فکر کنم این بهترین راه حل باشه
مانند این کد
create procedure spname
@param1 type
as
SELECT * FROM table1 WHERE id IN
(select id from table2 where field=@param)
ealireza
شنبه 25 فروردین 1386, 09:04 صبح
دوست من دقت نکردی !!!!
SELECT * FROM [table] WHERE id IN (exec mypager @page=2)
برای مثال در حالت عادی خروجی exec mypager @page=2 بصورت زیر است
1
2
3
4
5
6
7
8
9
50
در حالت کلی بصورت زیر میتوانیم ازش استفاده کنیم
SELECT * FROM [table] WHERE id IN (1,2,3,4,5,6,7,8,9,50)
امیدوارم منظور منو متوجه شده باشید .
لطفا راهنمایی بفرمایید
AminSobati
شنبه 25 فروردین 1386, 11:04 صبح
تنها راهش اینه که خروجی SP رو داخل یک جدول قرار بدین به این شکل:
INSERT MyTable EXEC MySP
و از اون جدول برای Query اصلی استفاده کنین
ealireza
شنبه 25 فروردین 1386, 15:03 عصر
تنها راهش اینه که خروجی SP رو داخل یک جدول قرار بدین به این شکل:
INSERT MyTable EXEC MySP
و از اون جدول برای Query اصلی استفاده کنین
استاد #TEMP رو پیشنهاد میکنین ؟
AminSobati
شنبه 25 فروردین 1386, 15:31 عصر
بله خوبه. یا حتی Table Variable. ولی بهتره روی فیلد از جداول موقتی که پیشنهاد شد، ایندکس داشته باشید
ealireza
شنبه 25 فروردین 1386, 15:37 عصر
استاد تیبل که تمپ میشه فقط شامل حد اکثر 50 تا عدد هست
که فقط یک فیلد ID داره
چه ایندکس براش پیش نهاد میکنین
آیا این TEMP در رم ساخته میشود یا در هارد
آیا برای یک کوئری که استفاده خیلی زیادی ازش میشه این روش مناسبه
مرسی
AminSobati
شنبه 25 فروردین 1386, 16:46 عصر
شما میتونین از هر کدوم از دو روش زیر استفاده کنین:
create table #t1(
c1 int primary key)
-------------
declare @t1 table (c1 int primary key)
جدولی که با # یا ## شروع میشه، در Tempdb ساخته میشه. جدولی که با @ شروع میشه، در حافظه قرار داره ولی اگر حجم اطلاعاتی که داخل اون Insert میشه خیلی زیاد بشه، به روی دیسک (Tempdb) منتقل میشه.
من برای ایندکس از PK استفاده کردم با فرض اینکه مقادیر شما یونیک هستند. اگر نه، برای جدول # جداگانه ایندکس بسازید. برای جدول @ نمیشه جداگانه ایندکس ساخت
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.