查找对所有其他数据库中的一个数据库列的引用

时间:2013-08-12 13:49:11

标签: sql sql-server

当服务器上任何数据库中的存储过程引用特定数据库中的列(假设数据库为AA)时,我希望将这5列作为输出。< / p>

Column_name  Table_Name   Schema_Name   Procedure_Name   Database_Name

2 个答案:

答案 0 :(得分:1)

对于您所在的当前数据库,其中有四列非常容易获取:

SELECT
    TableName = t.Name,
    SchemaName = s.Name,
    ColumnName = c.Name,
    DatabaseName = DB_NAME()
FROM 
    sys.tables t
INNER JOIN
    sys.schemas s ON [t].[schema_id] = [s].[schema_id]
INNER JOIN 
    sys.columns c ON [t].[object_id] = [c].[object_id]

所有数据库中的所有表中的所有列不容易获得的内容。另外:确定每个列使用的程序也相当棘手(或几乎不可能)。

答案 1 :(得分:0)

marc_s回答我生成一个查询,该查询给出了该表所依赖的逗号分隔的Procedure_Name

 SELECT
    TableName = t.Name,
    SchemaName = s.Name,
    ColumnName = c.Name,
    DatabaseName = DB_NAME(),
    STUFF((SELECT  ',' +  name 
         FROM sys.procedures
         WHERE object_id in (SELECT distinct id from sys.sysdepends
                                WHERE depid = (SELECT object_id FROM sys.tables
                                                WHERE name=t.Name)
                              )
        FOR XML PATH('')), 1, 0, '') AS sps
FROM 
    sys.tables t
INNER JOIN
    sys.schemas s ON [t].[schema_id] = [s].[schema_id]
INNER JOIN 
    sys.columns c ON [t].[object_id] = [c].[object_id]