当前位置: 首页 > 面试题库 >

SQL在表的所有列中搜索文本值

封锐藻
2023-03-14
问题内容

我有一个包含许多列的巨大表,并且我知道该列有时带有一些特定的值’MyValue’。如何在一个包含“ MyValue”的特定表中选择所有行,而不管在哪一列中。

我在这里找到相关主题: 如何在SQLServer数据库的任何位置找到值?

但是我的查询需要一个较小的大炮。我知道表名,就是“ MyTable”。我不需要搜索整个数据库。


问题答案:

要在一个简单的语句中不使用特殊过程的情况下执行此操作,可以将每一行转换为XML,然后在XML上使用XQuery来搜索该行中匹配的任何值。因此,例如:

declare @SearchValue as varchar(20)
set @SearchValue = 'MyValue'

select *
    --,(select MyTable.* for XML PATH (''),TYPE) AllColumns
    --,convert(nvarchar(255),(select MyTable.* for XML PATH (''),TYPE).query('for $item in * where $item=sql:variable("@SearchValue") return $item')) FoundColumns
from MyTable
where convert(nvarchar(255),(select MyTable.* for XML PATH (''),TYPE).query('for $item in * where $item=sql:variable("@SearchValue") return $item'))<>''

专为此任务设计的过程可能可以更有效地执行此过程,并可以利用索引等优势。老实说,我不会在没有太多考虑的情况下将其放入生产数据库解决方案中,但是作为一个综合的搜索工具,它是不错。我在40秒内对700,000条记录表进行了搜索。但是,如果我按每列分别进行过滤,它将几乎立即运行。还有一些注意事项:

  • 表的所​​有列都不能为XML标记添加空格或其他不友好的字符。我不知道如何获取带有空格的列名。也许有办法。
  • 筛选器必须用XQuery编写…这与SQL不完全相同。但是您可以使用=,<,>,甚至还有模式匹配。
  • 查询函数的参数必须是字符串文字。因此,您不能动态地构建字符串。这就是为什么我将变量用作搜索值的原因,但是如果需要,也可以使用sql:column(“ ColName”)。
  • 如果要搜索除字符串以外的其他类型,则您使用的搜索字符串必须与将字段转换为XML值的条件完全匹配。


 类似资料:
  • 问题内容: 如何在SQL Server中搜索表的所有列? 问题答案: 如果您正在寻找完全的全场比赛。如果要查找子字符串匹配项,则必须进行很长的路要走:

  • 本文向大家介绍在SQL Server 2005所有表中搜索某个指定列的方法,包括了在SQL Server 2005所有表中搜索某个指定列的方法的使用技巧和注意事项,需要的朋友参考一下 有时候我们只知道列的名字,但是不知道这列数据到底在哪个表里面,那么可以用下面的办法把含有这列数据的表查找出来。   在你实际试用中,把ColumnName换成你要查的列的名字就可以了。 字符串在某字段里时,如何写搜索

  • 问题内容: 是否可以在每个表的每个字段中搜索Oracle中的特定值? 有几百个表,有些表中有成千上万的行,因此我知道这可能需要很长时间才能查询。但是我唯一知道的是我要查询的字段的值是1/22/2008P09RR8。< 我已经尝试过使用以下语句根据我认为应命名的内容找到合适的列,但未返回任何结果。 这个数据库上绝对没有文档,我也不知道该字段是从哪里提取的。 有什么想法吗? 问题答案: 引用: 我已尝

  • 我有一个查询,可以查找与某个数据库的列名匹配的所有表和视图。我正在使用SQL SERVER 2008 我想扩展查询的功能,以便在所有数据库中搜索,甚至查找具有我搜索的列名的存储过程。

  • 问题内容: 我想在我存储在Elasticsearch 7.3中的文档中搜索单词 我想要在以前版本的Elasticsearch上工作的示例是: 但是此查询不适用于Elasticsearch 7+,因为已删除。现在该字段消失了,我该如何编写查询以完成相同的任务? 注意:我已经阅读了将所有字段复制到自定义字段中的建议,但是这要求显式地写出每个字段以包括在all_fields字段中。由于我有很多小字段,因

  • 有没有一种方法可以使用VS代码在一个目录中的所有文件中搜索文本?