Как мне вызвать эту функцию в sproc? - PullRequest
0 голосов
/ 08 сентября 2010

Я получил эту функцию от кого-то здесь:

    create FUNCTION [dbo].[fnSplitString] (@s varchar(512),@sep char(1)) 
RETURNS table 
AS 
RETURN ( 
    WITH Pieces(pn, start, stop) AS ( 
      SELECT 1, 1, CHARINDEX(@sep, @s) 
      UNION ALL 
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) 
      FROM Pieces 
      WHERE stop > 0 
    ) 
    SELECT pn, 
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s 
    FROM Pieces 
  ) 

Обычно там, где предложения sprocs, я называю этот тип функции следующим образом:

WHERE u.[Fleet] IN (SELECT [VALUE] FROM dbo.udf_GenerateVarcharTableFromStringList(@Fleets, ','))   

Как мне поступитьВызов функции выше аналогичным образом?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 08 сентября 2010

Вы хотите заменить [значение] на [с].

1 голос
/ 08 сентября 2010

Поскольку вы сказали, что результат:

SELECT * FROM dbo.fnSplitString('abc,def', ',')

правильный, то, вероятно, все должно работать.Проверьте, что происходит, когда у вас есть пустой токен (две соседние запятые) и посмотрите, будут ли результаты такими, как вы ожидаете.

Кроме того, я заметил, что существует эффективный предел на длину входной строки.Убедитесь, что ничего не отрезано.

0 голосов
/ 08 сентября 2010

Функция не удаляет начальные / конечные пробелы, поэтому, если у вас есть строка 'a, b, c' и разделитель ',' вы получите таблицу с 'a', 'b', 'c' , Совпадает ли это в вашем U. [Fleet]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...