Использование LIKE с IN / OR в хранимой процедуре - PullRequest
2 голосов
/ 04 июня 2011

Я пытаюсь создать хранимую процедуру в 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 (????))

Невозможно заменить ??. В основном я хочу использовать LIKE с IN / ИЛИ . Любая помощь?

Ответы [ 3 ]

3 голосов
/ 04 июня 2011

Если количество параметров неизвестно, то вам нужно будет выполнить табличную операцию. В основном что-то вроде

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

Чтобы сгенерировать таблицу MyParameters, вы можете создать ее в своем коде или использовать новые табличные параметры в 2008 году.

1 голос
/ 04 июня 2011

Будет ли у вас работать:

WHERE  Col1 LIKE '[A,B,C]%'
// or for A,B,C you can just write
WHERE  Col1 LIKE '[A-C]%' 
0 голосов
/ 04 июня 2011

Ты это имел ввиду?

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,'%');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...