PDA

View Full Version : سوال: پارامتر ورودی Store Procedure ، وقتی مقداری بین یک تا چند رشته باشد



hamedjim
جمعه 10 مرداد 1399, 23:53 عصر
دوستان سلام.

برای برنامه ای، در یکی از spهایی مورد نیاز، باید یک پارامتر ورودی تعریف کنم که مقدار اون در دستور IN به این صورت قرار بگیره:



SELECT ID, F1, F2, F3 FROM tbl WHERE ID IN @ID

فیلد ID از نوع VARCHAR هست و مقدار اون مثلا میتونه به این شکل باشه:



('CCC')

یا

('AAA', 'BBB', 'DDD')


در واقع اینطور فرض کنید که باید یک sp که شامل یک select هست نوشته بشه. شرط Select هم برای یکی از فیلدهای رشته ای، توسط کاربر مثلا می تونه ('aaa') یا ('bbb', 'aaa') یا ... باشه. (یعنی کاربر می تونه یک یا چند گزینه دلخواه رو انتخاب کنه. پس بهترین حالت اینه که در کامند IN چک بشه). با توجه به این حالت ها، من به چه صورت می تونم این sp رو تعریف کنم؟

یوسف زالی
شنبه 11 مرداد 1399, 11:09 صبح
سلام. یکی از این روش ها:
Exec string
Temp table
XML
Split String

برای مورد شما من روش Split String رو پیشنهاد می کنم
پارامتر رو می دین داخل یک تابع که اون رو Explode می کنه تو یه تیبل، بعد روش جوین می زنید.

hamedjim
شنبه 11 مرداد 1399, 22:17 عصر
آقا یوسف ممنون از راهنمایی.
نکات خیلی خیلی جالبی بود. ذهن من برای خیلی کارها در آینده باز شد.
اما در رابطه با پیشنهاد شما، با توجه به اینکه تعداد آیتم ها نامشخصه، به نظرم استفاده از Split String یه کم سخت باشه. چون مثلا در همون مثال بالا ممکنه کاربر 1، 2، 3 یا هر تعدادی که مد نطرش هست رو در یک CheckListBox انتخاب کنه. ولی من از قبل نمی دونم تعدادش چند تاس تا بتونم split کنم.

یوسف زالی
یک شنبه 12 مرداد 1399, 10:13 صبح
برای اسپلیت کردن دستور وجود داره و نیاز نیست تعداد رو بدونید.
https://www.sqlservertutorial.net/sql-server-string-functions/sql-server-string_split-function/#:~:text=The%20STRING_SPLIT()%20function%20is,base d%20on%20a%20specified%20separator.&text=In%20this%20syntax%3A,VARCHAR%20%2C%20NCHAR%2 0%2C%20or%20CHAR%20.

hamedjim
یک شنبه 12 مرداد 1399, 15:31 عصر
بله درسته. حق با شماست. من بعد از ارسال پست قبلی، متوجه شدم دارم به اشتباه دستور SubString_Index(Str, Delim, Count) رو بررسی می کنم.