如何列出引用SQL Server中另一个表的某一行的所有表?

时间:2014-09-01 14:48:31

标签: sql sql-server tsql

我目前正在处理一个项目,该项目需要清除一些未使用的字段并对其数据库中的表进行规范化,以使其看起来更好。 其中一个表的字段不是外键(但应该是),所以我不能使用 sp_help 来了解哪些表是相关的。

enter image description here

我目前的任务是删除 IdTipoEspecialidad = 3 的行,前提是没有任何使用此行的表(因为我需要删除这两行)。

是否有一些快捷方式或查询可以让这项工作更轻松?

1 个答案:

答案 0 :(得分:2)

假设所有这些非外键列都至少遵循一些命名约定,您可以执行以下查询:

SELECT
    'SELECT * FROM [' + schemas.name + '].[' + tables.name + ']' 
        + ' WHERE [' + columns.name + '] = 3'
FROM
    sys.schemas
    INNER JOIN sys.tables
        ON schemas.schema_id = tables.schema_id
    INNER JOIN sys.columns
        ON tables.object_id = columns.object_id
WHERE
    columns.name LIKE '%IdTipoEspecialidad%'

该查询的输出将为您提供一堆其他查询,您可以运行这些查询以查看是否有任何列引用该特定行。