我正在尝试查找数据库中包含特定电子邮件地址的所有表。
我唯一知道的是,这意味着我正在寻找长度一定的varchar的任何列。
我正在考虑通过sys.tables
进行某种循环,然后针对该循环中的每个表,对表中的行进行循环,然后对每一行中的每一列进行求值。
可能不是最好的解决方法,但是有些事情我还不知道,尤其是:
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以编写一个快速查询,为每个字段建立查询。
select 'select * from ' + TABLE_NAME + ' where ' + COLUMN_NAME + ' = ''the@email.com'''
from INFORMATION_SCHEMA.COLUMNS
where DATA_TYPE = 'nvarchar' and CHARACTER_MAXIMUM_LENGTH = '256'
答案 1 :(得分:0)
您可能正在查看诸如sp_MSforeachtable之类的东西。在[sys]。[columns]中找到所有具有[varchar]类型的列的表([nvarchar]也正确吗?它们是否也可以在[char]或[nchar]列上?)。然后使用sp_MSforeachtable访问列中的值。
基本上,您正在看嵌套的游标。一种用于获取所有“文本”列以及关联的表。另一个在每个表和列上运行选择。
这是蛮力的东西,不漂亮。
我去过一个既有(通常是古老而又受人尊敬)设计的环境。有时您只需要做这样的事情。我喜欢编写SQL,因此很有趣。
幻想从头开始构建东西到一些完美的理想总是很好,但是没有一个计划是完美的。您必须能够做这样的事情。