【问题标题】:How do I read meta-data from a SQL Server database table?如何从 SQL Server 数据库表中读取元数据?
【发布时间】:2014-04-09 14:49:03
【问题描述】:

我是 SQL Server 的初学者。我得到了一个 SQL Server 备份文件格式的数据库。我想出了如何恢复数据库,但现在我正在寻找导出表(最终导出到 Stata .dta 文件)

我很困惑如何查看和提取我的 SQL Server 数据库可能包含的任何元数据。例如,我有一列标记为Sex,值是1 和2。但是,我不知道哪个数字是指男性,哪个数字是指女性。我将如何查看列描述(如果存在)以查看是否有任何标签可以澄清这个问题?

编辑:快速提问。如果我使用导入/导出向导,会自动提取元数据吗?

【问题讨论】:

    标签: sql sql-server database metadata


    【解决方案1】:

    这是迄今为止从 SQL 导出到 excel 的最佳帖子:

    http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926

    要将数据导出到带有标题(列名)的新 EXCEL 文件,请创建以下过程

    create procedure proc_generate_excel_with_columns
    (
        @db_name    varchar(100),
        @table_name varchar(100),   
        @file_name  varchar(100)
    )
    as
    
    --Generate column names as a recordset
    declare @columns varchar(8000), @sql varchar(8000), @data_file varchar(100)
    select 
        @columns=coalesce(@columns+',','')+column_name+' as '+column_name 
    from 
        information_schema.columns
    where 
        table_name=@table_name
    select @columns=''''''+replace(replace(@columns,' as ',''''' as '),',',',''''')
    
    --Create a dummy file to have actual data
    select @data_file=substring(@file_name,1,len(@file_name)-charindex('\',reverse(@file_name)))+'\data_file.xls'
    
    --Generate column names in the passed EXCEL file
    set @sql='exec master..xp_cmdshell ''bcp " select * from (select '+@columns+') as t" queryout "'+@file_name+'" -c'''
    exec(@sql)
    
    --Generate data in the dummy file
    set @sql='exec master..xp_cmdshell ''bcp "select * from '+@db_name+'..'+@table_name+'" queryout "'+@data_file+'" -c'''
    exec(@sql)
    
    --Copy dummy file to passed EXCEL file
    set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> "'+@file_name+'"'''
    exec(@sql)
    
    --Delete dummy file 
    set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''
    exec(@sql)
    

    创建过程后,通过提供数据库名、表名和文件路径来执行它

    EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'
    

    【讨论】:

    • 感谢您的帮助!这非常有用,虽然因为我确实是一个完整的初学者,但我并不完全理解这个解决方案。我是否必须用我的特定值替换所有以 @ 开头的条目?例如对于@db_name,我是否将其替换为我的实际数据库名称?另外,这是否也会将带有表格的元数据导出到 Excel 中?
    • 是的,您必须将所有以 @ 开头的条目替换为特定值。该脚本将帮助您将带有表格的元数据导出到 Excel
    • 我明白了。太好了,谢谢你的帮助,我会试试看的!当替换为特定值时,我是直接输入名称还是应该注意特定的语法?
    • 您可以在此类似的答案stackoverflow.com/questions/9086880/… 中找到更多信息您必须阅读所有步骤并设置所有变量才能启动脚本。
    • 你能选择我的答案作为正确答案吗?谢谢! :)
    【解决方案2】:

    如果您的数据库管理员和/或开发人员使用了所谓的扩展属性来记录数据库表,那么您可以使用以下 T-SQL 语句检索这些描述:

    SELECT 
        TableName = t.Name,
        ColumnName = c.Name,
        ep.class_desc,
        ep.value
    FROM 
        sys.extended_properties ep
    INNER JOIN 
        sys.tables t ON ep.major_id = t.object_id
    INNER JOIN 
        sys.columns c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
    

    它使用一些 SQL Server 目录视图(sys.tables 等),其中包含有关 SQL Server 数据库对象的所有有价值的元数据信息。

    【讨论】:

    • 嗨。谢谢您的帮助。我很抱歉,因为我确实是一个完整的初学者。那么我可以只打开一个新查询并将其复制并粘贴进去吗?还是我必须将 t.Name 更改为我的表名?
    • @Vincent:打开一个查询窗口,确保你在正确的数据库中,然后执行这个 T-SQL 语句
    • 一个更快速的问题。如果我使用导入/导出向导,会自动提取元数据吗?感谢您的帮助!
    【解决方案3】:

    假设您有正确的外键,您可以搜索使用以下 T-SQL 引用的列:

    SELECT constraint_object_name
         , constraint_object_name
         , referenced_object_name
         , referenced_column_name
    FROM   (
            SELECT Object_Name(parent_object_id) As constraint_object_name
                 , constraint_columns.name As constraint_column_name
                 , Object_Name(referenced_object_id) As referenced_object_name
                 , referenced_columns.name As referenced_column_name
            FROM   sys.foreign_key_columns
             INNER
              JOIN sys.columns As constraint_columns
                ON constraint_columns.object_id = foreign_key_columns.parent_object_id
               AND constraint_columns.column_id = foreign_key_columns.parent_column_id
             INNER
              JOIN sys.columns As referenced_columns
                ON referenced_columns.object_id = foreign_key_columns.referenced_object_id
               AND referenced_columns.column_id = foreign_key_columns.referenced_column_id
           ) As foreign_key_details
    WHERE  'SearchingForThisColumnHere' IN (constraint_column_name, referenced_column_name)
    

    简单地搜索共享名称的列

    SELECT Object_Name(object_id) As object_name
         , name As column_name
    FROM   sys.columns
    WHERE  name = 'SearchingForThisColumnHere'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多