PDA

View Full Version : رد کردن مقدار in یک کوئری بوسیله پارامتر در Stored Procedure



sm
پنج شنبه 08 دی 1384, 20:02 عصر
می خواهم مقدار مربوط به in رو که داخل where یک کوئری قرار داره بوسیله پارامتر رد کنم:
(where k in (@Param
میخوام Param@ را به Stored Procedure رد کنم ولی خطا میگیره آخه اونو از Char تعریف کردم و خودش اتوماتیک یه ' به اول و آخرش اضافه میکنه و همین مشکل ساز شده
آیا میشه اونو از جنس دیگری تعریف نمود که این مشکل حل بشه ؟
یا اینکه راه حل دیگه ای داره
ضمنا میخوام از این SP داخل Crystal Report استفاده کنم.

AminSobati
جمعه 09 دی 1384, 16:21 عصر
دوست عزیزم،
اگر داخل پارامتر شما، مقادیری هستند که مثلا با Comma از هم جدا شدن، نمیتونین در IN استفاده کنین. مگر اینکه:
1) از Dynamic TSQL استفاده کنین
2) پارامتر رو تجزیه کنین و مقادیرش رو در یک جدول موقتی بریزین (مثلا به اسم TMP@) و به این نحو عمل کنین:


SELECT * FROM MyTable WHERE RowID IN (SELECT RowID FROM @TMP)


3) اگر پارامتر رو میتونین به شکل XML بفرستید داخل SP، با استفاده از OpenXML هم میشه شبیه روش شماره 2 عمل کرد

sm
سه شنبه 13 دی 1384, 15:29 عصر
ممنون از temptableاستفاده کردم و اونها رو از هم جدا کردم و مشکلم حل شد
اگه امکان داره در مورد XML ی رد کردن اونها بیشتر توضیح بدین
ممنون

AminSobati
سه شنبه 13 دی 1384, 16:51 عصر
OpenXML یک نمای جدولی از XML به شما ارائه میده که میتونین جدول اصلی رو با این نمای جدولی شکل، Join کنین چون استفاده از IN، دقیقا منطق Join رو داره

sm
شنبه 17 دی 1384, 00:07 صبح
میشه بیشتر در مورد کار کردن با XML , SQL Server توضیح بدین