用户从下拉列表中选择各种单词,并将这些值添加到逗号分隔的字符串中。将字符串传递给存储过程时,我希望它select * from
存在该单词的表。
表
id----word
1-----cat
2-----dog
3-----mouse
4-----dog
传递给存储过程的字符串是cat, dog
,因此返回第1,2和4列。
有没有办法在sql server中执行此操作?
答案 0 :(得分:4)
使用IN
:
SELECT *
FROM your_table
WHERE word IN ('cat', 'dog')
答案 1 :(得分:2)
首先需要创建一个SplitCSV函数:
CREATE FUNCTION [dbo].[SplitCSV] (@CSVString VARCHAR(8000), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(8000))
AS
BEGIN
DECLARE @pos INT;
DECLARE @slice VARCHAR(8000);
SELECT @pos = 1;
IF LEN(@CSVString) < 1 OR @CSVString IS NULL RETURN;
WHILE @pos!= 0
BEGIN
SET @pos = CHARINDEX(@Delimiter,@CSVString);
IF @pos != 0
SET @slice = LEFT(@CSVString, @pos - 1);
ELSE
SET @slice = @CSVString;
IF( LEN(@slice) > 0)
INSERT INTO @temptable(Items) VALUES (@slice);
SET @CSVString = RIGHT(@CSVString, LEN(@CSVString) - @pos);
IF LEN(@CSVString) = 0 BREAK;
END
RETURN
END
GO
然后你就可以使用它:
SELECT *
FROM myTable
WHERE ID IN (
SELECT items FROM [dbo].[SplitCSV]('1,2,3,4,5', ',')
)
答案 2 :(得分:1)
SELECT *
FROM Table
WHERE '%,' + Word + ',%' LIKE ',' + @your_csv_param + ','
参数和列的开头和结尾处的额外逗号用于阻止搜索将cat
与catfish
匹配。
答案 3 :(得分:0)
如果要选择除鼠标以外的所有动物,可以使用NOT IN
SELECT * FROM
TABLE
WHERE Word Not IN('Mouse')
所以你可以避免输入许多类型的动物
答案 4 :(得分:0)
CREATE FUNCTION
ALTER FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20) = ' ')
RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value varchar(8000)
)
AS
BEGIN
DECLARE @index int
SET @index = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @index = CHARINDEX(@delimiter , @text)
IF (@index = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@index > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
RETURN
END
----
select * from yourtable where column in ( select value from fn_Split(@para1,',')