PDA

View Full Version : سوال: اشکال در ارسال پارامتر به Store Procedure !!!



amin_alexi
پنج شنبه 21 آذر 1387, 11:02 صبح
سلام
من یک Sp دارم
به این صورت

Create Procedure Sp_tstP
@CodeL Nvarchar(3000)
As
Begin
Select Code, Name
From Acc_1384
Where Code In (@CodeL)
End
حالا می خوام یک پارامتر به صورت زیر بفرستم

Exec Sp_tstP '10','100'خوب این که Error میده !!! :لبخند: (چون من یک پارامتر تعریف کردم ولی این مدلی 2 تا فرستادم )
اگه این جوری بفرستم که جواب نمیده ! (آخه دو پارامتر من رو یکی حساب کرده !)

Exec Sp_tstP "'10','100'"هر دو رو یکی حساب می کنه
تعداد کد ها محدود و شمارا نیست که به تعداد اونها پارامتر بزارم
میشه یکی بگه راهکار چیه !
در حقیقت من یک لیست از Code وName می خوام که شامل یک لیست از این کدها (10,100,200.110-1,100-112) باشه !؟ که این لیست متغییره ! :ناراحت:
امید وارم منظورم رو رسونده باشم :لبخندساده:

ar.shirazi
پنج شنبه 21 آذر 1387, 11:34 صبح
سلام
من یک Sp دارم
به این صورت

Create Procedure Sp_tstP
@CodeL Nvarchar(3000)
As
Begin
Select Code, Name
From Acc_1384
Where Code In (@CodeL)
End
حالا می خوام یک پارامتر به صورت زیر بفرستم

Exec Sp_tstP '10','100'خوب این که Error میده !!! :لبخند: (چون من یک پارامتر تعریف کردم ولی این مدلی 2 تا فرستادم )
اگه این جوری بفرستم که جواب نمیده ! (آخه دو پارامتر من رو یکی حساب کرده !)

Exec Sp_tstP "'10','100'"هر دو رو یکی حساب می کنه
تعداد کد ها محدود و شمارا نیست که به تعداد اونها پارامتر بزارم
میشه یکی بگه راهکار چیه !
در حقیقت من یک لیست از Code وName می خوام که شامل یک لیست از این کدها (10,100,200.110-1,100-112) باشه !؟ که این لیست متغییره ! :ناراحت:
امید وارم منظورم رو رسونده باشم :لبخندساده:

یک راه بسیار بد برای این کار چنین است که خودتان کوئری را بسازید و آن را اجرا کنید:



Create Procedure Sp_tstP
@CodeL Nvarchar(3000)
As
Begin
declare @Query nvarchar(max);
set @Query= 'Select Code, Name From Acc_1384 Where Code In (' + @CodeL +')';
EXEC(@Query)
End

البته این راه بسیار بدی است چون خطر Sql injection و دیگر تهدید های امنیتی ، همچنین بازدهی پایین به علت کامپایل های مجدد sp و .. وجود دارد.

amin_alexi
پنج شنبه 21 آذر 1387, 11:42 صبح
بله این میشه :چشمک:
ولی به همون علتهایی که فرمودین این روش مناسب نیست ... :متفکر:
منم واسه همین دنباله یه راهکاره دیگه هستم ... اگه دوستان می دونن روشی به غیر از این نیست بگن ... ( من تحملم زیاده :لبخند: )

mannai29
پنج شنبه 21 آذر 1387, 11:43 صبح
من از کدهای ورودیم یک رشته می سازم به این شکل:
-100--200--300--400-
بعد ارسالش میکنم به پروسیجر و بعد در پروسیجر جستجو میکنم به این شکل:
(Where '-'+Code+'-' In (@CodeL

sheitoonbala
پنج شنبه 21 آذر 1387, 14:59 عصر
یک راه بسیار بد برای این کار چنین است که خودتان کوئری را بسازید و آن را اجرا کنید:

کد:
Create Procedure Sp_tstP
@CodeL Nvarchar(3000)
As
Begin
declare @Query nvarchar(max);
set @Query= 'Select Code, Name From Acc_1384 Where Code In (' + @CodeL +')';
EXEC(@Query)
End
البته این راه بسیار بدی است چون خطر Sql injection و دیگر تهدید های امنیتی ، همچنین بازدهی پایین به علت کامپایل های مجدد sp و .. وجود دارد.


سلام.
ببخشید می شه بفرمایید مشکلی که دوستمون داره یعنی ارسال n تا code تحت 1 پارامتر چگونه با این کار حل می شه؟ محتوای درون CodeL@ چیه؟

ar.shirazi
پنج شنبه 21 آذر 1387, 17:33 عصر
سلام.
ببخشید می شه بفرمایید مشکلی که دوستمون داره یعنی ارسال n تا code تحت 1 پارامتر چگونه با این کار حل می شه؟ محتوای درون CodeL@ چیه؟

سلام
زمانی که میخواهند پارامتر @CodeL را ارسال کنند، باید محتوای این متغیر چیزی شبیه به این باشد:


'1,5,16,45,28'