表存储标志或参数值

时间:2016-05-18 17:43:06

标签: sql sql-server sql-server-2008

我有一个人口统计表和一个Employee表,每个表都有一个包含M,F和U等值的Gender列。还有另一个名为Parameter的表,它提供了这些值的描述和字段名称,即:

Description    Field_name  Value
Male             DEMCD      M
Female           DEMCD      F
Unknown          DEMCD      U 
Male             EMPDC      M
Female           EMPDC      F 

在人口统计表(例如员工表)之外的其他表中,有几个实例使用这些值。有没有办法可以找到哪个字段名称被标记到哪个表,以及该表的名称?

2 个答案:

答案 0 :(得分:0)

在SQL Server中,您可以在sys.tables和sys.columns中的列中找到表。例如,您可以使用这样的查询在任何位置搜索列(这假设列中的列名称一致):

SELECT 
    t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
FROM sys.tables AS t
    INNER JOIN sys.columns c 
        ON t.OBJECT_ID = c.OBJECT_ID
        AND c.name LIKE '%YourColumnName%'

如果所有字段名都存在,您也可以使用此条件将其绑定到参数表:

AND c.name IN (SELECT DISTINCT Field_name FROM Parameter)

如果您希望能够从找到的表中进行选择,可以在select子句中添加如下列:

'SELECT * FROM [' + SCHEMA_NAME(schema_id) + '].[' + t.name + '] WHERE [' + c.name + '] IN (''Value1'',''Value2'')' AS select_code_val

您可以手动复制/粘贴并运行它,在较大的存储过程中将其作为动态sql运行,等等。

答案 1 :(得分:0)

这将为您提供具有指定列

的对象列表
    select so.name from sys.objects so inner join sys.columns sc 
on so.object_id = sc.object_id
where sc.name = 'yourcolumnname'