用户从下拉列表中选择各种单词,然后将这些值添加到逗号分隔的字符串中。将字符串传递给存储过程时,我希望将其传递select * from
给存在该单词的表。
桌子
id----word
1-----cat
2-----dog
3-----mouse
4-----dog
传递到存储过程的字符串cat, dog
返回第 1、2 和 4 列。
有没有办法在 sql server 中做到这一点?
用户从下拉列表中选择各种单词,然后将这些值添加到逗号分隔的字符串中。将字符串传递给存储过程时,我希望将其传递select * from
给存在该单词的表。
桌子
id----word
1-----cat
2-----dog
3-----mouse
4-----dog
传递到存储过程的字符串cat, dog
返回第 1、2 和 4 列。
有没有办法在 sql server 中做到这一点?
使用IN
:
SELECT *
FROM your_table
WHERE word IN ('cat', 'dog')
您首先需要创建一个函数 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', ',')
)
SELECT *
FROM Table
WHERE '%,' + Word + ',%' LIKE ',' + @your_csv_param + ','
例如,参数和列的开头和结尾处的额外逗号是为了防止搜索cat
匹配catfish
。
如果你想选择除 mouse 之外的所有动物,你可以使用 NOT IN
SELECT * FROM
TABLE
WHERE Word Not IN('Mouse')
所以你可以避免输入多种类型的动物
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,',')