首页 > 解决方案 > 查询处理器耗尽了内部资源 | 将 IN (tsql) 与通配符一起使用的解决方法?

问题描述

我需要在我的数据库中找到大量的值。

以下是数据的样子:

0054321
54321
999
999  - HALLO?
54321 Hallo?
000054321

由于这是一次性的事情,我想我只需使用 OR 和 LIKE 对数据进行非常长的查询:

... WHERE ' ' + FLD1 + ' ' LIKE '%54321 %' 
OR        ' ' + FLD1 + ' ' LIKE '%999 %' 
OR ...

想象一下,但使用 80k OR。在这种情况下,SQL Server 会遇到以下问题:

查询处理器用尽了内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为您错误地收到了此消息,请联系客户支持服务以获取更多信息。

作为一种解决方法,我读到您应该声明一个临时表并将您的值放在那里,然后用“IN”搜索 - 但我必须用 LIKE 搜索,这样我才能使用通配符。

有谁知道如何解决或解决这个问题?

我不想使用相同的方法将命令拆分为多个命令。

感谢您的建议!

标签: sqlsql-servertsql

解决方案


您仍然可以使用临时表。

where exists (select 1
              from patterntable pt
              where ' ' + x.field1 + ' ' like pt.pattern
             )

x是该字段来自哪个表的别名。

或者:

              where ' ' + x.field1 + ' ' like '% ' + pt.pattern + ' %'

取决于您是否要存储通配符。


推荐阅读