在存储过程中使用LIKE和IN / OR

时间:2011-06-04 13:27:52

标签: sql tsql sql-server-2008 stored-procedures

我正在尝试在SQL Server 2008中创建一个存储过程,我试图复制一个简单的查询

SELECT Col1, Col2 
FROM Table
WHERE Col1 LIKE 'A%'
    OR Col1 LIKE 'B%'
    OR Col1 LIKE 'C%'

作为

CREATE PROCEDURE usp_MySP
    @ColValues varchar(100) = NULL
AS
SELECT Col1, Col2 
FROM Table
WHERE (@ColValues IS NULL OR Col1 LIKE (????))

无法替换??基本上我想在 IN / OR 中使用 LIKE 。有什么帮助吗?

3 个答案:

答案 0 :(得分:3)

如果参数数量未知,则需要进行表操作。基本上像

select
    col1,
    col2
from
    Table t
    inner join MyParameters p on (t.Col1 like p.Query)

要生成表格MyParameters,您可以在代码中构建表格,也可以在2008年使用新的table-valued parameters

答案 1 :(得分:1)

它会对你有用吗?

WHERE  Col1 LIKE '[A,B,C]%'
// or for A,B,C you can just write
WHERE  Col1 LIKE '[A-C]%' 

答案 2 :(得分:0)

这是你的意思吗?

CREATE FUNCTION dbo.ParseString (@string varchar(500), @delimeter char(1))
RETURNS @valuelist table (
  -- columns returned by the function
  value nvarchar(255) NOT NULL
)
begin
  declare @pos int
  declare @piece varchar(500)

  –- Need to tack a delimiter onto the end of the input string if one doesn’t exist
  if right(rtrim(@string),1) <> @delimiter
   set @string = @string  + @delimiter

  set @pos =  patindex('%,%' , @string)
  while @pos <> 0
  begin
    set @piece = left(@string, @pos – 1)

    insert into @valuelist (value) VALUES (@piece)

    set @string = stuff(@string, 1, @pos, '')
    set @pos =  patindex('%,%' , @string)
  end
end

CREATE PROCEDURE usp_MySP
    @ColValue1 varchar(100) = NULL
    ,@ColValue2 varchar(100) = NULL
AS
SELECT distinct Col1, Col2 
FROM Table
inner join parsestring('a,b,c')
WHERE col1 like concat(value,'%');