0

我正在将一个变量传递给包含公司列表的数据库...... var 正在传递,但数据库没有返回结果。我如何通过列表?我会使用什么样的 Where 语句?

4

2 回答 2

2

如果我们将逗号分隔的列表传递给存储过程以检索在字段中具有这些字符串之一作为值的许多记录,则我们使用 SQL 函数。此函数返回一个可用于过滤数据的表。

这是我们的函数(你应该在使用它之前执行创建)

CREATE FUNCTION [dbo].[GetTableFromString]
(
    @string NVARCHAR(4000),
    @separator CHAR
)
RETURNS @resultTable TABLE (string NVARCHAR(255))
AS
  BEGIN
    DECLARE @myString NVARCHAR(255)
    IF (LEN(@string) > 0)
      BEGIN
        DECLARE @start INT,
                @charIndex INT
        SET     @start = 1
        SET     @charIndex = CHARINDEX(@separator, @string, @start) -- Get the position of the first seperator

        WHILE ( @charIndex >= 0 )
          BEGIN
            IF @charIndex = 0 -- No seperator found, take the whole string and insert it in the result table
              BEGIN
                SELECT  @myString = SUBSTRING(@string, @start, LEN(@string) - @start + 1)
                SET     @charIndex = -1
              END
            ELSE
              BEGIN
                SELECT  @myString = SUBSTRING(@string, @start, CHARINDEX(@separator, @string, @start) - @start)
                SET     @start = CHARINDEX(@separator, @string, @start) + 1 -- Set the start position of the char after the seperator
                SET     @charIndex = CHARINDEX(@separator, @string, @start) -- Get the position of the next seperator
              END

            INSERT INTO @ResultTable (string) VALUES (@myString)
          END
      END

    RETURN 
  END

这就是函数的使用方式:

SELECT  YourField1, 
        YourField2, 
        ... 
FROM    YourTableName 
WHERE   YourFieldx In ( SELECT  string 
                        FROM    dbo.GetTableFromString('IBM,WalMart,KMart', ','))
于 2012-08-22T08:00:32.053 回答
0

我认为你需要发布你在做什么。

听起来好像您有一个 VARCHAR 变量,其中包含一个存储过程的逗号分隔列表,在这种情况下,SP 需要使用动态 sql,但我不知道。

于 2012-08-20T16:09:59.580 回答