PDA

View Full Version : نحوه گرفتن query با تعداد پارامترهای نامعین با sp



javad_mjt
یک شنبه 02 خرداد 1389, 23:14 عصر
سلام
من می خوام یک query از جدولم بگیرم به صورتی که توی شرطم یک ستون و با همه پارامترهام که تعدادشون نامعین هست برسی کنه
یعنی:
ممکنه کاربر یک پارامتر و برای مقایسه با فیلد id بفرسته ممکن n تا پارامتر و برای مقایه با فیلد id بفرسته. که در نهایت این n پارامتر با فیلد id مقایسه میشن.



create procedure myproc
???? id@
As
Begin
select Id,name from tb where id=@ID1 or id=ID2 or id=@ID3 or...id=@IDn

آیا همچنین امکانی وجود داره

محمد سلیم آبادی
دوشنبه 03 خرداد 1389, 02:52 صبح
سلام،
شما نمی توانید پارامترهای یک SP را متغیر و پویا تعریف کنید. بچاش می تونید ID را به شکل یک لیست که با یک کاراکتر از هم تفکیک شدن با نوع رشته به SP پاس بدین سپس رشته را Splitt کنید و در نهایت با جدول مورد نظر JOIN کنید و همه چیز به خوبی خاتمه خواهد یافت.

به این مقاله (http://www.30sharp.com/ShowArticle.aspx?nid=13&did=223&AuthorID=11)برای ایجاد تابع Splitter رجوع کنید و پس ساخت یک نمونه از آن در بانکتان این کد را بنویسین:

CREATE PROC MyTest (@s VARCHAR) AS
SELECT id, name
FROM table_name AS t
INNER JOIN dbo.splitter (@s, ',') AS d(word)
ON t.id = d.word;

mehrpars
دوشنبه 03 خرداد 1389, 03:03 صبح
قاط کردم ، جوابو اشتباه دادم ..
می تونی توی sp ت بجای شرط یک متغیر بگیری مثلا یک متغیر از جنس varchar و مقدار اونو از طرف developer ارسال کنی
یعنی شرط داینامیک و متغیرتو ف بجاش یک متغیر توی sp بذار و از اون ور (developer) این متغیرو مقدار دهی کن.
دیگه نمی فهمم چی می نویسم ، شب خوش

محمد سلیم آبادی
دوشنبه 03 خرداد 1389, 05:06 صبح
اگر ID از نوع عددی هست می تونید از Dynamic SQL برای حل مشکل استفاده کنید:


CREATE PROC Test (@ID VARCHAR(500)) AS
BEGIN
DECLARE @Command VARCHAR(500);
SET @Command = 'SELECT ID, name FROM tb WHERE ID IN ('+@ID+')';
EXECUTE @Command
END