ورود

View Full Version : حرفه ای: استفاده از پارامتر ارایه ای در sqltable adapter



daffy_duck376
چهارشنبه 12 آذر 1393, 07:45 صبح
با سلام خدمت دوستن. من یه بخشی دارم که کاربر باید از لیست گروه ایمیل ها گروههای مورد نظر را انتخاب کنه من یمیل ها را به صورت غیر تکراری select کنم و ایمیل ارسال کنم
دستورات رو نوشتم
Select * from Emiallist Where (group_id in (@@@@@@))
حالا تو بخشی که @@@@@@ موندم ینجا باید چی بنویسم و چطوری اونو بهش پاس بدم.

ahmad156
چهارشنبه 12 آذر 1393, 08:27 صبح
خلاصه:
پارامتر شما یه String باشه که مقادیر با کاما از هم جدا شده باشند.
چون در وهله اول Sql Server کل عبارت رو به صورت یه String میشناسه (و نه کلید هایی مجزایی که بین آنها کاما هست) پس یه Function توی Sql Server به صورت زیر ایجاد میکنیم تا String رو به کلید های مجزا تبدیل کنه:

CREATE FUNCTION [dbo].
[ListToTable] (@InStr VARCHAR(MAX))
RETURNS @TempTab TABLE
(id int not null)
AS
BEGIN
;-- Ensure input ends with comma
SET @InStr = REPLACE(@InStr + ',', ',,', ',')
DECLARE @SP INT
DECLARE @VALUE VARCHAR(1000)
WHILE PATINDEX('%,%', @INSTR ) <> 0
BEGIN
SELECT @SP = PATINDEX('%,%',@INSTR)
SELECT @VALUE = LEFT(@INSTR , @SP - 1)
SELECT @INSTR = STUFF(@INSTR, 1, @SP, '')
INSERT INTO @TempTab(id) VALUES (@VALUE)
END
RETURN
END

حالا کوئری نهایی شما به صورت زیر میشه:

Select * from Emiallist Where (group_id in (SELECT * FROM dbo.ListToTable(@yourKeyString))



و کلید هاتون رو به عنوان یه String میفرستین:

new SqlParameter("@yourKeyString", yourKeyString)