Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从SQL Server数据库表中读取元数据?_Sql_Sql Server_Database_Metadata - Fatal编程技术网

如何从SQL Server数据库表中读取元数据?

如何从SQL Server数据库表中读取元数据?,sql,sql-server,database,metadata,Sql,Sql Server,Database,Metadata,我是SQL Server的完全初学者。我得到了一个SQL Server备份文件格式的数据库。我知道了如何恢复数据库,但现在我希望导出表(最终导出到Stata.dta文件) 我对如何查看和提取SQL Server数据库可能包含的任何元数据感到困惑。例如,我有一列标记为Sex,值为1和2。然而,我不知道哪个数字是指男性,哪个数字是指女性。如何查看列描述(如果存在)以查看是否有任何标签可以澄清此问题 编辑:快速提问。如果我使用导入/导出向导,它会自动提取元数据吗?这是迄今为止从SQL导出到excel的

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

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


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

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

要将数据导出到带有标题(列名)的新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'

如果您的数据库管理员和/或开发人员使用了所谓的扩展属性来记录数据库表,那么您可以使用以下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-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'

谢谢你的帮助!这是非常有用的,虽然因为我实际上是一个完全的初学者,我不完全理解这个解决方案。我是否必须用我的特定值替换所有以@开头的条目?例如,对于@db_name,我是否将其替换为实际的数据库名称?此外,这是否也会将表中的元数据导出到Excel?是的,您必须用特定值替换以@开头的所有条目。此脚本将帮助您将元数据和表导出到ExcelI see。太好了,谢谢你的帮助,我会试试的!当替换为特定值时,我是直接键入名称还是应该知道具体的语法?您可以在这个类似的答案中找到更多信息。在启动脚本之前,您必须阅读所有步骤并设置所有变量。您可以选择我的答案作为正确答案吗?谢谢!:)你好谢谢你的帮助。我道歉,因为我实际上是一个完全的初学者。那么我可以打开一个新的查询并复制粘贴它吗?或者我必须将t.Name更改为我的表名吗?@Vincent:打开一个查询窗口,确保您在正确的数据库中,然后执行此t-SQL语句。还有一个快速问题。如果我使用导入/导出向导,它会自动提取元数据吗?谢谢你的帮助!