PDA

View Full Version : ارسال پارامتری برای کار با IN CLAUSE از #C به SQL



sirvan-me
چهارشنبه 20 دی 1391, 11:33 صبح
سلام به همه ی دوستان ... چطور می تونم پارامتری رو از VS با استفاده از زبان #C به SQL برای کار با SP زیر ارسال کنم :


SELECT * FROM [Table] wHERE ID IN (@Param)


کوئری بالا رو همینطوری نوشتم که متوجه منظورم بشین ... حالا من می خوام یه سری عدد به طور مثال 9 تا رو به صورت پارامتری به این SPارسال کنم ...

sirvan-me
پنج شنبه 21 دی 1391, 19:41 عصر
هم اکنون نیازمند به یاری سبزتان هستم !!!!!!

Mahmoud.Afrad
پنج شنبه 21 دی 1391, 20:49 عصر
یک تابع Table-Valued به صورت زیر ایجاد کنید:

CREATE FUNCTION [dbo].[fnSplitCSV] ( @NumberList varchar(max))
RETURNS @SplitList TABLE ( ListMember INT )
AS
BEGIN
DECLARE @Pointer int, @ListMember varchar(25)
SET @NumberList = LTRIM(RTRIM(@NumberList))
IF (RIGHT(@NumberList, 1) != ',')
SET @NumberList=@NumberList+ ','

SET @Pointer = CHARINDEX(',', @NumberList, 1)
IF REPLACE(@NumberList, ',', '') <> ''
BEGIN
WHILE (@Pointer > 0)
BEGIN
SET @ListMember = LTRIM(RTRIM(LEFT(@NumberList, @Pointer - 1)))
IF (@ListMember <> '')
INSERT INTO @SplitList VALUES (convert(int,@ListMember))
SET @NumberList = RIGHT(@NumberList, LEN(@NumberList) - @Pointer)
SET @Pointer = CHARINDEX(',', @NumberList, 1)
END
END
RETURN
END

کار این تابع split کردن مقادیر هست.

به اینصورت در SP استفاده کنید:

CREATE PROCEDURE [dbo].[sp_test] ( @NumberList nvarchar(max) )
AS
BEGIN
SET NOCOUNT ON;

SELECT * FROM data WHERE data.id in (SELECT * FROM dbo.fnSplitCSV (@NumberList) )

END