Sql server 2008 在搜索返回的多行时使用标量值find string函数?
鉴于SQL Server 2008,我编写了一个简单的字符串查找函数,如下所示: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
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条记录,因此这将起作用。谢谢