SQL Server:提取表元数据(描述、字段及其数据类型)
我正在尝试找到一种方法来提取有关 SQL Server (2008) 中表的信息。
我需要的数据需要包括表的描述(从属性窗口中的“描述”属性填充)、该表的字段列表以及它们各自的 >数据类型。
有什么方法可以提取这样的元数据吗? 我想我必须使用一些 sys
sp 但我不确定是哪一个。
I am trying to find a way to extract information about my tables in SQL Server (2008).
The data I need needs to include the description of the table (filled from the Description property in the Properties Window), a list of fields of that table and their respective data types.
Is there any way I can extract such meta-data? I presume I have to use some sys
sp but I'n not sure which one.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(16)
如果您只是想以方便的方式查看信息,Red Gate 的 SQL 提示符可能会有所帮助。
如果将鼠标悬停在查询窗口中的对象文本上,SQL 提示符将在工具提示中显示 MS_Description 扩展属性文本。 单击工具提示将打开一个对话框,其中显示列信息以及对象的 DDL。
http://www.red-gate.com/products/sql-开发/sql-prompt/
If you simply want to view the information in a convenient way, Red Gate's SQL Prompt might help.
If you hover over the object text in a query window SQL Prompt will display the MS_Description extended property text in a tooltip. Clicking on the tooltip will open a dialog displaying the column information and also the object's DDL.
http://www.red-gate.com/products/sql-development/sql-prompt/
如果可以使用.NET代码,我建议使用SMO:http:// /msdn.microsoft.com/en-us/library/ms162169.aspx,在您的特定情况下,它将是 Table 类http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.table.aspx
与使用特定于版本的系统视图和表相比,这将是一个更可移植的解决方案。
如果这是您要定期使用的东西 - 您可能想要编写一个简单的控制台应用程序,也许使用运行时 T4 代码生成器 http://msdn.microsoft.com/en-us/library/ee844259.aspx
如果这只是一项一次性任务 - 您可以使用我的 LiveDoco 的( http://www.livedoco.com ) 使用可选的 XSLT 转换导出到 XML 功能,或者我确信有有免费的工具可以做到这一点。
这个看起来不错: http://sqldbdoc.codeplex.com/ - 通过 XSLT 支持 XML,但我'我不确定您是否可以对选定的表运行它(使用 LiveDoco 就可以)。
If it is OK to use .NET code I'd suggest using SMO: http://msdn.microsoft.com/en-us/library/ms162169.aspx, In your particular case it would be the Table class http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.table.aspx
This would be a more portable solution than using version specific system views and tables.
If this is something you are going to use on a regular basis - you might want to write a simple console application, perhaps with a runtime T4 code generator http://msdn.microsoft.com/en-us/library/ee844259.aspx
If it's just a one-off task - you could use my LiveDoco's( http://www.livedoco.com ) export to XML feature with an optional XSLT transform or I'm sure there are free tools out there that can do this.
This one looks okay: http://sqldbdoc.codeplex.com/ - supports XML via XSLT, but I'm not sure if you can run it for a selection of tables though (With LiveDoco you can).
要获取描述数据,不幸的是,您必须使用 sysobjects/syscolumns 来获取 ids:
您可以使用 info-schema 来实现,但您必须连接等来调用 OBJECT_ID() - 那么有什么意义呢?
To get the description data, you unfortunately have to use sysobjects/syscolumns to get the ids:
You can do it with info-schema, but you'd have to concatenate etc to call OBJECT_ID() - so what would be the point?
有关表和列的通用信息可以在这些表中找到:
表描述是扩展属性,您可以从 sys.extended_properties 查询它们:
Generic information about tables and columns can be found in these tables:
The table description is an extended property, you can query them from sys.extended_properties:
您可以尝试
sp_help <对象名称>
You could try
sp_help <Name of object>
我最喜欢@Andomar 的答案,但我也需要列描述。 这是他的查询,经过修改后也包含了这些内容。 (取消注释 WHERE 子句的最后部分以仅返回任一描述不为空的行)。
I liked @Andomar's answer best, but I needed the column descriptions also. Here is his query modified to include those also. (Uncomment the last part of the WHERE clause to return only rows where either description is non-null).
使用对象目录视图:
使用信息架构视图
Using Object Catalog Views:
Using Information Schema Views
看看这个:
Check this out:
根据您想要多少元数据,这对我有用:
哪里可能是 Northwind.dbo.Products 之类的整个内容或只是产品
Depending on how much metadata you want, this is working for me:
where could be the whole thing like Northwind.dbo.Products or just Products
获取基本元数据摘要的最简单方法是使用临时表,然后使用 EXEC 函数:
对于表中的所有列,这将为您提供
列名称,
数据类型,
计算长度,
预,
规模,
可为空,
修剪尾随空白,
固定LenNullInSource,
排序规则类型
Easiest way to get basic metadata summary is to use a temp table and then use EXEC function:
For all columns in the table, this will give you
Column Name,
Data Type,
Computed Length,
Prec,
Scale,
Nullable,
TrimTrailingBlanks,
FixedLenNullInSource,
Collation Type
如果您使用 java 代码提取查询,则可以使用一个很棒的类 ResultSetMetaData,它可以检索列名和列的属性(类型和长度)。
示例
If you are pulling your queries using java code, there is a great class that can be used, ResultSetMetaData, that can retrieve column names and the properties of the columns (type and length).
Example
我使用此 SQL 代码来获取有关列的所有信息。
I use this SQL code to get all the information about a column.
我刚刚完成了一个 .net 库,其中包含一些有用的查询,这些查询返回代码 gen/t4 模板的强类型 C# 对象。
nuget SqlMeta
项目站点
github 源码
外键元数据
I just finished a .net library with a few useful queries that return strongly typed C# objects for code gen/ t4 templates.
nuget SqlMeta
Project Site
github source
Foreign Key Metadata
有 2 种简单的方法:
选项 1
sp_help'schema.table_name'
选项 2
从 INFORMATION_SCHEMA.columns c WHERE c.table_name = 'table_name' 中选择 *
There are 2 simple ways:
Option 1
sp_help 'schema.table_name'
Option 2
SELECT * FROM INFORMATION_SCHEMA.columns c WHERE c.table_name = 'table_name'