另一个程序员创建的 SQL 函数正在减慢我的存储过程。
有谁知道为什么这会导致存储过程减慢其在查询 where 子句中的调用速度
AND (dbo.fn_XmlElementDateValue(ua.details, 'start_date') >= @StartDate)
AND (dbo.fn_XmlElementDateValue(ua.details, 'end_date') <= @EndDate)
功能
Create FUNCTION [dbo].[fn_XmlAttributeDateValue](@xml text, @tagname varchar(100))
RETURNS DATETIME
AS
BEGIN
DECLARE @startpos int, @endpos int, @returnvalue varchar(100)
IF (NOT @tagname IS NULL)
BEGIN
SET @startpos = CHARINDEX('<field name="' + @tagname + '" value="', @xml) + LEN('<field name="' + @tagname + '" value="')
IF (@startpos > 0)
BEGIN
SET @endpos = CHARINDEX('" />', @xml, @startpos)
IF (@endpos > @startpos)
BEGIN -- Return the requested value
SET @returnvalue = SUBSTRING(@xml, @startpos, @endpos - @startpos)
IF (ISDATE(@returnvalue) = 1)
BEGIN
RETURN CAST(@returnvalue AS DATETIME)
END
END
END
END -- Tag empty or not found
RETURN NULL
END