2010-09-08 6 views
0

Я получил эту функцию от кого-то здесь:Как я могу назвать эту функцию в sproc?

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, ',')) 

Как я могу идти о вызове функции выше в аналогичным образом?

Спасибо!

+0

Вы также можете выбрать список в таблице, а затем выбрать таблицу. Функции в предложении where обычно оцениваются с каждой строкой. – StingyJack

ответ

3

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

+0

hmm. это все равно ничего не пропускает в мой параметр, когда пробел связан со значением .... dang – user380432

1

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

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

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

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

+0

column pn - row 1 = 1 row 2 = 2 coulnm s - row 1 = abc row 2 = def – user380432

0

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

Смежные вопросы