0

我有一个查询,它在 where 子句中使用用户定义的函数将数组拆分为值表。是这样的:

select ...
from ...
where EXISTS(SELECT Value FROM fn_Split(@Status,'#')
and EXISTS(SELECT Value FROM fn_Split(@Type,'#') 

@Status 和 @Type 由用户传入。他们可以选择多个值进行查询。

有没有办法删除这个用户定义的函数?你有什么建议?

4

2 回答 2

1

似乎fn_Split(@Status, '#')并不fn_Split(@Type, '#')依赖于您的外部查询。在这种情况下,您可以在执行查询之前调用这两个函数(我想它们可能会返回表),然后在查询中使用这些表。如果它们很大,您可以尝试向它们添加索引。

于 2013-01-25T23:43:17.973 回答
0

您不能总是相信执行计划所说的内容,尤其是在涉及标量函数时。

您可以测试标量拆分函数的效果 - 将一些典型输入输入到这些函数中,并使用硬编码和 SET STATISTICS IO/TIME ON 进行选择,然后对拆分中的相同数据执行相同操作. 如果标量引起了问题,那应该是显而易见的。

于 2013-01-26T03:06:04.290 回答