ارسال آرایه به پروسیجر در sql و ساخت نوع داده سفارشی در sql
در بعضی از پروسیجر ها نیاز داریم که یک پارامتر از نوع آرایه ارسال کنیم ولی با توجه به اینکه نوع آرایه مناسبی در sql وجود ندارد لذا به چند روش میتوان آرایه را ارسال کرد.
در مثال زیر قصد دارم تا یک ارایه رو به دو روش مرسوم برای یک پروسیجر ارسال کنم
1) ارسال به روش نوع سفارشی (Custom user type)
این روش ایجاد یک تایپ سفارشی در sql هست که در واقع همان روش table است با این تفاوت که تایپ مورد نظر خود را از table ایجاد میکنیم و از ان در هر جایی که بخواهیم میتوانید استفاده کنیم.
دستور ساخت تایپ بصورت زیر است
create type [typename] definition
برای مثال من قصد دارم تا یک آرایه یا جدول از نوع int را ایجاد کنم و از آن در هر جایی از دیتابیس و پروسیجر ها یا ... که نیاز داشتم از آن استفاده کنم
پس بصورت دستورم رو مینویسم :
create type MyList as table(ID int)
در بالا من یک نوع تایپ با نام MyList ایجاد کردم که در واقع یک نوع جدول است با یک عضو با نام ID
تایپ مورد نظر رو میتونید در مسیر Database -> Programmability -> Types -> User-Defined Table types ببنید.
حال من قصد دارم یک پروسیجر با ورودی تایپ جدیدم ایجاد کنم که قرار است لیست محصولات با دامنه آرایه درخواستی برای من بازگرداند، پس بصورت زیر دستوراتم رو وارد می کنم :
create procedure sp_hs_getProducts @list MyList readonly as begin select * from Products where id in (select ID from @list) end
در آخر برای کار با این پروسیجر در سمت کد نویسیهایتان کافی است یک DataTable با عضو ID ایجاد و به عنوان پارامتر به این پروسیجر ارجاع دهید
2) ارسال ارایه به روش رشته و parse کردن در سمت sql
در این روش که به مراتب ساده تر است و برای ارسال داده های ساده بیشتر پیشنهاد میشود ارایه را از طریق یک رشته اراسل میکنیم در واقع پروسیجر بالا رو میتونم به روش زیر هم بازنویسی کنم:
create procedure sp_hs_getHypersourceProducts @list nvarchar(500) as begin select * from Products where id in (select value from STRING_SPLIT(@list,',') end
که در اون پارامتر ما بصورت '5,10,35,24' میباشد