checkboxlist
があります。選択された(チェックされた)アイテムはList<string> selected
に保存されます。
たとえば、選択された値は7日のうちmonday,tuesday,thursday
です
List<>
をカンマ区切りのstring
に変換しています。つまり、.
string a= "monday,tuesday,thursday"
現在、この値を文字列としてストアドプロシージャに渡しています。次のようなクエリを実行したい:
Select *
from tblx
where days = 'Monday' or days = 'Tuesday' or days = 'Thursday'`
私の質問は、ストアドプロシージャで文字列を分離する方法ですか?
プロシージャを格納してクエリで使用するためにコンマ区切りの(任意の区切り文字)文字列を渡す場合は、その文字列を吐き出す必要があり、それを使用します。
以下に例を示します。
DECLARE @str VARCHAR(500) = 'monday,tuesday,thursday'
CREATE TABLE #Temp (tDay VARCHAR(100))
WHILE LEN(@str) > 0
BEGIN
DECLARE @TDay VARCHAR(100)
IF CHARINDEX(',',@str) > 0
SET @TDay = SUBSTRING(@str,0,CHARINDEX(',',@str))
ELSE
BEGIN
SET @TDay = @str
SET @str = ''
END
INSERT INTO #Temp VALUES (@TDay)
SET @str = REPLACE(@str,@TDay + ',' , '')
END
SELECT *
FROM tblx
WHERE days IN (SELECT tDay FROM #Temp)
これを試して:
CREATE FUNCTION [dbo].[ufnSplit] (@string NVARCHAR(MAX))
RETURNS @parsedString TABLE (id NVARCHAR(MAX))
AS
BEGIN
DECLARE @separator NCHAR(1)
SET @separator=','
DECLARE @position int
SET @position = 1
SET @string = @string + @separator
WHILE charindex(@separator,@string,@position) <> 0
BEGIN
INSERT into @parsedString
SELECT substring(@string, @position, charindex(@separator,@string,@position) - @position)
SET @position = charindex(@separator,@string,@position) + 1
END
RETURN
END
次に、この関数を使用します。
Select *
from tblx
where days IN (SELECT id FROM [dbo].[ufnSplit]('monday,tuesday,thursday'))
これを試して
CREATE FUNCTION Split
(
@delimited nvarchar(max),
@delimiter nvarchar(100)
) RETURNS @t TABLE
(
-- Id column can be commented out, not required for sql splitting string
id int identity(1,1), -- I use this column for numbering splitted parts
val nvarchar(max)
)
AS
BEGIN
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'
insert into @t(val)
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)
RETURN
END
GO
使用法:
select * from tblx where days in (select val from dbo.split('monday,tuesday,thursday',','))
私はあなたがこれが欲しいと思います
SELECT * FROM tblx where days in ('Monday','Tuesday','Thursday')
あなたはこのようにそれを得ることができます:
var a = "monday,tuesday,thursday";
var sql = string.Format("Select * from tblx where days IN ('{0}')", string.Join("','",a.Split(new[] {','})));
私も同じ問題を抱えています。私はこれを試しました..そしてこれは適切に実行されました
ALTER FUNCTION [dbo].[Split]
(
@List varchar(max),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value nvarchar(max)
)
AS
BEGIN
IF (len(@List) <=0)
Begin
Return
End
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END
Run :
SELECT * FROM dbo.Split('Apple,Banana,Mango',',')
出力:
私は同じ問題に直面しています、そして私はずっと試みますが、期待される解決策を得ることができません。最後に私はフォローするのが好きでした。それがうまくいくことを願って試してみてください...
create Function [dbo].[Split]
(
@RowData NVARCHAR(MAX),
@SplitOn NVARCHAR(5)
)
RETURNS @RtnValue TABLE
(
Id INT IDENTITY(1,1),
Data NVARCHAR(100)
)
AS
BEGIN
DECLARE @Cnt INT
SET @Cnt = 1
WHILE (Charindex(@SplitOn,@RowData)>0)
BEGIN
INSERT INTO @RtnValue (data)
SELECT Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
SET @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
SET @Cnt = @Cnt + 1
END
INSERT INTO @RtnValue (data)
SELECT Data = ltrim(rtrim(@RowData))
RETURN
END
そして、ストアプロシージャにそのようなコードを入れます。
select @ActualTarget= count(*) from UpdateVisitDetails where CreatedBy IN (SELECT [DATA] FROM [dbo].[Split](@AllDATS,',' ))