Использование функции поиска строки со скалярным значением при поиске нескольких возвращаемых строк? - PullRequest
2 голосов
/ 10 января 2012

Учитывая SQL Server 2008, я написал простую функцию поиска в строке следующим образом:

ALTER FUNCTION [dbo].[FindInString]
(
    @FindText VARCHAR(255),
    @TextSource VARCHAR(512)
)
RETURNS INT
AS
BEGIN

    DECLARE @Result INT
    SET @Result = 0

    SELECT @Result = CHARINDEX(@FindText, @TextSource)

    RETURN @Result
END

Сложность функции find может измениться в будущем, поэтому я хотел инкапсулировать ее в функцию.

Теперь, когда у меня есть только одна совпадающая запись в таблице, это работает:

SELECT @FindCount = dbo.FindInString('somestring', (SELECT TableSearch FROM Segments WHERE CID=22793))

Однако, когда оператор выбора возвращает более одного, имеет смысл выяснить, почему выдается ошибка.

хотелось бы знать, что мне нужно сделать, чтобы эта работа была простым вызовом, как указано выше?

Мне нужно только знать, есть ли одно совпадение (мне просто нужно знать, если @FindCount> 0), и я предполагаю, что может потребоваться какой-то цикл, но хотелось бы сделать это как можно более простым .

Спасибо.

1 Ответ

1 голос
/ 10 января 2012

Вы можете использовать агрегатные функции и один выбор:

select
    @FindCount = sum(dbo.FindInString('somestring', TableSearch))
from
    Segment
where
    CID = 22793

Просто позаботьтесь об этом, так как FindInString будет запускать для каждой строки , что может значительно снизить производительность запросов. В этом случае это единственный способ решить вашу проблему, но остерегайтесь неприятностей, которые могут возникнуть.

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