PDA

View Full Version : ارسال پارامتر به Where IN ?



hrsaberi
دوشنبه 25 فروردین 1393, 19:46 عصر
سلام جدول داده با نام Customer و با دو فیلد ID,Name وجود دارد. ID : int Name: nvarchar می خواهیم با پارامتر وجود مقادیر را بررسی کنیم. مثال :
Declare @Param nvarchar(max) Set @Param = '56,55' Select * From Customer Where ID in @Param بطور مثال متن کد بالا بصورت StoreProcedure ذخیره شده و می خواهیم پارامتر را به Store وارد کنیم. ولی در کد بالا SQL مقدار پارامتر را بصورت یک رشته واحد در نظر می گیرد و از قابلیت عملگر IN نمی توان استفاده کرد لطفا اگر کسی تجربه ای داره مطرح کنه.

یوسف زالی
دوشنبه 25 فروردین 1393, 22:14 عصر
سلام.
داینامیک کوئری دوست من
البته با XML و این چیزا هم می شه کار کرد.

مهرداد صفا
دوشنبه 25 فروردین 1393, 22:23 عصر
با سلام.

--بسم الله الرحمن الرحیم
--اللهم صل علی محمد و آل محمد

declare @IDS NVarchar(max);
set @IDS='2,3';
declare @sql NVarChar(max);
set @sql='select * from Person where ID in ('+@IDS+')';
exec(@sql);

hrsaberi
سه شنبه 26 فروردین 1393, 10:16 صبح
با تشکر از مهرداد
مثال شما کاملا درسته ولی زمانی که فقط بخواهیم Select و خروجی دیتا داشته باشیم.
زمانیکه مثلا نیاز به cursor و پردازش اطلاعات باشد چکار کنیم ؟؟؟
****************
declare @ID int
declare @IDS NVarchar(max);
set @IDS='58,59';
declare @sql NVarChar(max);
Declare Cur Cursor
For

set @sql='select * from MAT_REFRENCE where REFRENCE_ID in ('+@IDS+')';

exec(@sql);
Open Cur
Fetch Next Fom Cur into @Id
While @@FETCH_STATUS=0
begin
print @Id
Fetch Next Fom Cur into @Id
end
Close Cur
Deallocate Cur

****************
داشتن کرسر در بالا امکان پذیر نیست.

یوسف زالی
سه شنبه 26 فروردین 1393, 11:00 صبح
1- می تونید همه کارهاتون رو در همون رشته بنویسید و انجام بدید.
2- می تونید از روشی مثل xml استفاده کنید:




declare @XML xml =
'<Root>
<Data Value = "10" />
<Data Value = "11" />
<Data Value = "12" />
<Data Value = "13" />
<Data Value = "14" />
</Root>'


declare @IXML int
exec sp_xml_preparedocument @IXML OUTPUT, @XML


select *
from OpenXML(@IXML, '/Root/Data', 1)
with (
Value int
)

حالا به راحتی می تونید از همین جدول استفاده کنید.