我正在使用一个包含~20个表的数据库,并且需要查找其中包含字符串值'fee'的表。
我如何搜索包含此内容的表?
我尝试使用
Select t.name as table_name, c.name as column_name
from sys.columns c
inner join sys.tables t
on c.object_id=t.object_id
Where c.name like '%fees%'
显然,虽然这只返回了表格,其各自的列包含“费用”一词。
有没有办法找到包含行值='费用'的表?
答案 0 :(得分:1)
SQL数据库存储结构化数据,因此需要在结构中找到所需数据的正确位置。也就是说,您可以尝试多种方法,具体取决于您拥有的数据总量。
如果数据量相对较小,比如几百兆字节到几千兆字节左右,您可以将每个表转储到文本形式的文件中。然后,您可以使用像grep这样的工具来搜索包含该数据的文件。
如果数据量相当大,您可以像查询一样查询系统目录,但查询的形式可以是返回sql选择作为输出的形式。然后,您可以执行这些sql选择,以查看是否有任何返回您要查找的内容。 E.g。
select
'select ' + c.name + ' from ' + t.name + ' where ' + c.name + ' like ''%fees%'''
from
sys.columns as c
inner join
sys.tables as t
on c.object_id=t.object_id
where
c.system_type_id in (167, 231) -- Get the rest of these values by inspecting sys.types
and t.type_desc = 'USER_TABLE'