我需要在数据库中找到大量的值。
以下是数据的外观:
0054321
54321
999
999 - HALLO?
54321 Hallo?
000054321
因为这是一次性的事情,所以我认为我只是使用OR和LIKE进行一个非常长的查询来搜索数据:
... WHERE ' ' + FLD1 + ' ' LIKE '%54321 %'
OR ' ' + FLD1 + ' ' LIKE '%999 %'
OR ...
想象一下,但是OR为80k。在这种情况下,SQL Server将遇到以下问题:
查询处理器用尽了内部资源,无法生成查询计划。这是罕见的事件,仅在极其复杂的查询或引用大量表或分区的查询中才会发生。请简化查询。如果您认为收到此消息是错误的,请联系客户支持服务以获取更多信息。
作为一种解决方法,我读到您应该声明一个临时表并将值放在其中,然后使用“ IN”进行搜索-但我必须使用LIKE进行搜索,以便能够使用通配符。
有人知道如何解决或解决此问题吗?
我不想使用同一方法将命令拆分为多个命令。
感谢您的建议!
答案 0 :(得分:0)
您仍然可以使用临时表。
where exists (select 1
from patterntable pt
where ' ' + x.field1 + ' ' like pt.pattern
)
x
是该字段来自哪个表的别名。
或者:
where ' ' + x.field1 + ' ' like '% ' + pt.pattern + ' %'
取决于是否要存储通配符。