چگونه مقادیر را در قالب آرایه به SP و Function در SQL ارسال کنیم؟ بعضی اوقات پیش میاد که بخواییم مقادیری رو به عنوان پارامتر به Function ها یا Stored Procedure ها در SQL Server ارسال کنیم. مشکل اینجاست که SQL Server نوع داده ای برای دریافت آیتم ها به صورت آرایه نداره. برای این کار، می توان از راهکار زیر استفاده کرد. فرض کنیم که بانک ما جدولی با ساختار زیر دارد:
CREATE TABLE People ( [Id] INT IDENTITY NOT NULL PRIMARY KEY, [Name] NVARCHAR(200) NOT NULL, [Age] SMALLINT NOT NULL ); GO
حال می خواهیم Stored Procedure ای بنویسیم که مقادیر این جدول را برای برگرداند و قابلیت فیلتر بر اساس Name را نیز داشته باشد. برای اینکار یک SP ایجاد می کنیم که و نام آن را GetPeople میگذاریم. شیوه ای که میخواهیم این SP را اجرا کنیم به صورت زیر است:
exec GetPeople @names
اگر پارامتر names از نوع NULL بود کل اطلاعات جدول را برگردانده و اگر مقدار داشت، بر اساس نام های وارد شده اطلاعات را برگرداند:
1. exec GetPeople NULL 2. exec GetPeople 'Saeed,Hossein'
دستور اول همه سطرها و دستور دوم فقط ستون هایی که نام های Hossein و Saeed را دارند بر می گرداند.
برای اینکار ابتدا یه Function به نام Split تعریف می کنیم که پارامتری از نوع رشته را دریافت کرده و یک جدول شامل مقادیر جدا شده برای ما بر می گرداند:
create function dbo.Split ( @String varchar(max) ) returns @SplittedValues table ( Id varchar(50) primary key ) as begin declare @SplitLength int, @Delimiter varchar(5) set @Delimiter = ',' while len(@String) > 0 begin select @SplitLength = (case charindex(@Delimiter,@String) when 0 then len(@String) else charindex(@Delimiter,@String) -1 end) insert into @SplittedValues select substring(@String,1,@SplitLength) select @String = (case (len(@String) - @SplitLength) when 0 then '' else right(@String, len(@String) - @SplitLength - 1) end) end return end
بعد باید SP مورد نظر برای گرفتن اطلاعات را بنویسیم:
create procedure GetPeople @names nvarchar(500) as select * from People where (@names is null or Name in (select * from Split(@names)))
با این کار ما قابلیت ارسال چند مقدار به صورت پارامتر به SP یا Function را خواهیم داشت.
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود