我有一个查询,它在 where 子句中使用用户定义的函数将数组拆分为值表。是这样的:
select ...
from ...
where EXISTS(SELECT Value FROM fn_Split(@Status,'#')
and EXISTS(SELECT Value FROM fn_Split(@Type,'#')
@Status 和 @Type 由用户传入。他们可以选择多个值进行查询。
有没有办法删除这个用户定义的函数?你有什么建议?
我有一个查询,它在 where 子句中使用用户定义的函数将数组拆分为值表。是这样的:
select ...
from ...
where EXISTS(SELECT Value FROM fn_Split(@Status,'#')
and EXISTS(SELECT Value FROM fn_Split(@Type,'#')
@Status 和 @Type 由用户传入。他们可以选择多个值进行查询。
有没有办法删除这个用户定义的函数?你有什么建议?
似乎fn_Split(@Status, '#')
并不fn_Split(@Type, '#')
依赖于您的外部查询。在这种情况下,您可以在执行查询之前调用这两个函数(我想它们可能会返回表),然后在查询中使用这些表。如果它们很大,您可以尝试向它们添加索引。
您不能总是相信执行计划所说的内容,尤其是在涉及标量函数时。
您可以测试标量拆分函数的效果 - 将一些典型输入输入到这些函数中,并使用硬编码和 SET STATISTICS IO/TIME ON 进行选择,然后对拆分中的相同数据执行相同操作. 如果标量引起了问题,那应该是显而易见的。