0

次の値を持つテーブルに列があります。名前はコンマで区切られています..

   ProjID    Names
   1         Adam , Babita Tripathy, Alex, Mihir , Farhad
   2         SaravanaKumar, Shruthi, Arthi, Suneeth 

入力値をストアド プロシージャに渡して値を取得しています。入力値は複数の名前です。入力が(Arthi,SaravanaKumar)の場合、ProjID 1 と 2 には入力名の 1 つがあるため、結果として両方の行を取得する必要があります。どうすれば達成できますか。助けてください..

検索条件。

    IF @Names<>''  
      SET @condition = @condition+' ProdType.NamesLIKE'''+'%'+RTRIM(@Names)+'%'' AND' 
4

1 に答える 1

1

関数を使用して入力文字列を分割できます

IF EXISTS(SELECT * FROM sysobjects WHERE ID = OBJECT_ID('UF_CSVToTable'))
 DROP FUNCTION UF_CSVToTable
GO

CREATE FUNCTION UF_CSVToTable
(
 @psCSString VARCHAR(8000)
)
RETURNS @otTemp TABLE(sID VARCHAR(MAX))
AS
BEGIN
 DECLARE @sTemp VARCHAR(10)
 DECLARE @tTemp VARCHAR(10)

 WHILE LEN(@psCSString) > 0
 BEGIN
  SET @sTemp = LEFT(@psCSString, ISNULL(NULLIF(CHARINDEX(',', @psCSString) - 1, -1),
                    LEN(@psCSString)))
  SET @psCSString = SUBSTRING(@psCSString,ISNULL(NULLIF(CHARINDEX(',', @psCSString), 0),
                               LEN(@psCSString)) + 1, LEN(@psCSString))
  INSERT INTO @otTemp(sID) VALUES (@sTemp)                   
 END

RETURN
END
Go

このように呼ぶことができます。

select * from UF_CSVToTable('1,2,3,4,5,6,7,15,55,59,86')

SQL フィドルのデモ

于 2013-09-29T09:08:36.303 に答える