Sql server 2008 在搜索返回的多行时使用标量值find string函数?

Sql server 2008 在搜索返回的多行时使用标量值find string函数?,sql-server-2008,tsql,function,Sql Server 2008,Tsql,Function,鉴于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, @Te

鉴于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))
但是,当select语句返回多个时,抛出错误的原因是有道理的

我想知道的是,我需要做什么,仍然有这个工作作为一个简单的电话,如上所述

我只需要知道是否有一个匹配项(我只需要知道@FindCount>0),我猜可能需要某种循环,但希望尽可能简单


谢谢。

您可以使用聚合函数和一个选项:

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

注意这一点,因为
FindInString
将为每一行触发,这会显著降低查询性能。在这种情况下,这是解决问题的唯一方法,但请注意可能出现的问题。

CID不会匹配超过10或20条记录,因此这将起作用。谢谢