0

用户从下拉列表中选择各种单词,然后将这些值添加到逗号分隔的字符串中。将字符串传递给存储过程时,我希望将其传递select * from给存在该单词的表。

桌子

id----word

1-----cat

2-----dog

3-----mouse

4-----dog

传递到存储过程的字符串cat, dog返回第 1、2 和 4 列。

有没有办法在 sql server 中做到这一点?

4

5 回答 5

4

使用IN

SELECT *
FROM   your_table
WHERE  word IN ('cat', 'dog')
于 2013-07-08T09:44:39.490 回答
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', ',')
)
于 2013-07-08T09:57:27.410 回答
1
SELECT *
FROM Table
WHERE '%,' + Word + ',%' LIKE ',' + @your_csv_param + ','

例如,参数和列的开头和结尾处的额外逗号是为了防止搜索cat匹配catfish

于 2013-07-08T09:57:19.270 回答
0

如果你想选择除 mouse 之外的所有动物,你可以使用 NOT IN

SELECT * FROM
TABLE
WHERE Word Not IN('Mouse')

所以你可以避免输入多种类型的动物

于 2013-07-08T09:50:30.663 回答
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,',')
于 2013-07-08T11:57:43.190 回答