我有一个包含许多列的巨大表,并且我知道该列有时带有一些特定的值’MyValue’。如何在一个包含“ MyValue”的特定表中选择所有行,而不管在哪一列中。
我在这里找到相关主题: 如何在SQL Server数据库的任何位置找到值?
但是我的查询需要一个较小的大炮。我知道表名,就是“ 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条记录表进行了搜索。但是,如果我按每列分别进行过滤,它将几乎立即运行。还有一些注意事项: