MS SQL,查看一个列表中的任何项是否与另一个列表中的项匹配

时间:2016-06-21 17:25:17

标签: sql stored-procedures

我正在编写SQL存储过程。传递给存储过程的参数之一是列表(以逗号分隔的字符串)。

我知道如果我想在该列表中找到特定字符串,我可以使用类似SELECT * FROM myTable WHERE myField IN (@myList)

的内容

但是如果" myField"还包含一个列表(以逗号分隔的字符串)。如何检查" @ myList"匹配" myField"?

中列表中的任何值

我正在使用 SQL Server 2014 SP1 ,如果这有任何区别。

1 个答案:

答案 0 :(得分:1)

在解析器的帮助下......那里有很多。

Select * 
 From  myTable
 Where MyField in ( Select Key_Value from [dbo].[udf-Str-Parse](@myList,',') )

或者可以是加入

Select A.* 
 From  myTable A
 Join ( Select * from [dbo].[udf-Str-Parse](@myList,',') b
   on A.MyField  = B.Key_Value

我的解析器

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--       Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
--       Select * from [dbo].[udf-Str-Parse]('id26,id46|id658,id967','|')

Returns @ReturnTable Table (Key_PS int IDENTITY(1,1) NOT NULL , Key_Value varchar(max))

As

Begin
   Declare @intPos int,@SubStr varchar(max)
   Set @IntPos = CharIndex(@delimeter, @String)
   Set @String = Replace(@String,@delimeter+@delimeter,@delimeter)
   While @IntPos > 0
      Begin
         Set @SubStr = Substring(@String, 0, @IntPos)
         Insert into @ReturnTable (Key_Value) values (@SubStr)
         Set @String = Replace(@String, @SubStr + @delimeter, '')
         Set @IntPos = CharIndex(@delimeter, @String)
      End
   Insert into @ReturnTable (Key_Value) values (@String)
   Return 
End