我正在尝试在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 。有什么帮助吗?
答案 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,'%');