如何选择任何列具有特定值的sql数据库表中的所有记录

时间:2019-01-09 13:35:48

标签: sql sql-server tsql

我正在尝试查找数据库中包含特定电子邮件地址的所有表。

我唯一知道的是,这意味着我正在寻找长度一定的varchar的任何列。

我正在考虑通过sys.tables进行某种循环,然后针对该循环中的每个表,对表中的行进行循环,然后对每一行中的每一列进行求值。

可能不是最好的解决方法,但是有些事情我还不知道,尤其是:

  1. 如何更好地做到这一点,以及
  2. 首先如何编写此查询。

任何帮助将不胜感激。

2 个答案:

答案 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,因此很有趣。

幻想从头开始构建东西到一些完美的理想总是很好,但是没有一个计划是完美的。您必须能够做这样的事情。