sql - 查询处理器耗尽了内部资源 | 将 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 搜索,这样我才能使用通配符。
有谁知道如何解决或解决这个问题?
我不想使用相同的方法将命令拆分为多个命令。
感谢您的建议!
解决方案
您仍然可以使用临时表。
where exists (select 1
from patterntable pt
where ' ' + x.field1 + ' ' like pt.pattern
)
x
是该字段来自哪个表的别名。
或者:
where ' ' + x.field1 + ' ' like '% ' + pt.pattern + ' %'
取决于您是否要存储通配符。
推荐阅读
- sapui5 - Eslint : sap-no-ui5-prop-warning
- css - 显示包含具有相同大小的不同大小图像的精灵
- c# - 负载均衡器更改后,HttpClient 停止重用连接
- python - Python:删除以 NaN 命名的列
- xpath - 如果满足条件,则修改 XML 配置 - Ansible
- ios - 如何在 iOS 中修剪持续时间超过 30 秒的视频?
- javascript - 剑道在网格下拉菜单中更新页面上的任何点击
- javascript - 如何在 WordPress 中翻译 Vue 输出?
- ios - 如何在 ARKit 中通过手势动作在 SCNNode 中添加标签节点和用户图像?
- python-2.7 - 如何在 python 2.7 django 中保存时检查对象是插入还是更新