查询处理器耗尽了内部资源,无法在(tsql)中使用通配符?
我需要在我的数据库中找到大量的值 以下是数据可能的样子:查询处理器耗尽了内部资源,无法在(tsql)中使用通配符?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要在我的数据库中找到大量的值 以下是数据可能的样子: 0054321 54321 999 999 - HALLO? 54321 Hallo? 000054321 由于这是一次性的事情,我想我应该简单地使用或之类的方式通过数据进行一个非常长的查询: ... WHERE ' ' + FLD1 + ' ' LIKE '%54321 %' OR ' ' + FLD1 + ' ' LIKE '%999 %' OR ... 想象一下这个,但是有80k或者更多。在这种情况下,SQL
0054321
54321
999
999 - HALLO?
54321 Hallo?
000054321
由于这是一次性的事情,我想我应该简单地使用或之类的方式通过数据进行一个非常长的查询:
... WHERE ' ' + FLD1 + ' ' LIKE '%54321 %'
OR ' ' + FLD1 + ' ' LIKE '%999 %'
OR ...
想象一下这个,但是有80k或者更多。在这种情况下,SQL Server将遇到以下问题:
查询处理器耗尽了内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于非常复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为此消息有误,请联系客户支持服务以获取更多信息
作为一种解决方法,我了解到您应该声明一个临时表并将值放在其中,然后使用“in”进行搜索,但我必须使用LIKE进行搜索,以便能够使用通配符
有人知道如何解决或解决这个问题吗
我不想使用相同的方法将命令拆分为多个命令
谢谢你的建议 您仍然可以使用临时表
where exists (select 1
from patterntable pt
where ' ' + x.field1 + ' ' like pt.pattern
)
x
是字段来自的任何表的别名
或:
取决于是否要存储通配符。您仍然可以使用临时表
where exists (select 1
from patterntable pt
where ' ' + x.field1 + ' ' like pt.pattern
)
x
是字段来自的任何表的别名
或:
取决于是否要存储通配符。这似乎是在select语句中使用正则表达式的一个好例子。下面是一些关于如何使用表达式搜索的示例:如果这是一件事,我看不出拆分条件有什么问题。80k
或
绝对不是正常的事情,所以可能没有正常的解决方案这似乎是在select语句中使用正则表达式的好例子。下面是一些关于如何使用表达式搜索的示例:如果这是一件事,我看不出拆分条件有什么问题。80k或
绝对不是正常的东西,所以可能没有正常的解决方案x是什么?为什么要在x.field1
中添加空格?@JuanCarlosOropeza。OP添加空格。我只是将它们添加到模式中,因为我认为这就是我的意图。我不知道您是否看到了这一点,我想不出为什么要这样做的原因之一。@JuanCarlosOropeza我添加空格是因为我需要它们来进行模式匹配。我删除了第一个空格,因为我只需要后面的空格。我有像000111(想要)0001111999(不想要)000111文本(想要)
-如果我搜索%111%
,我也会得到0000119999这样的值,这是我不需要的。所以我搜索%111[SPACE]
,但是现在我找不到只包含像“000111”这样的值的条目,因为它没有空格。通过在每个值周围添加一个空格,我可以解决这个问题,并且我的模式可以按预期工作?为什么要在x.field1
中添加空格?@JuanCarlosOropeza。OP添加空格。我只是将它们添加到模式中,因为我认为这就是我的意图。我不知道您是否看到了这一点,我想不出为什么要这样做的原因之一。@JuanCarlosOropeza我添加空格是因为我需要它们来进行模式匹配。我删除了第一个空格,因为我只需要后面的空格。我有像000111(想要)0001111999(不想要)000111文本(想要)
-如果我搜索%111%
,我也会得到0000119999这样的值,这是我不需要的。所以我搜索%111[SPACE]
,但是现在我找不到只包含像“000111”这样的值的条目,因为它没有空格。通过在每个值周围添加一个空格,我可以解决这个问题,并且我的模式可以按预期工作。