Wes*_*ill 5 database sql-server reflection metadata
我认为一些反思管理环境(例如.NET)以属性的形式向代码实体添加自定义元数据的能力非常强大.是否存在为数据库执行类似操作的机制?
数据库显然已经拥有相当数量的元数据; 例如,您可以获取所有表,列和外键引用的列表,这足以将架构图放在一起.但是,我可以想象很多用于更通用的东西,例如C#和DDL这种想象中融合的东西:
[Obsolete("Being replaced by the ClientInteraction table")]
create table CustomerOrder (
[SurrogateKey]
MyTableId int identity(1,1) primary key
[NaturalKey]
[ForeignKey("Customer", "CustomerId")] /* Actual constraint left out for speed */
,CustomerId int not null
[NaturalKey]
[ConsiderAsNull(0)]
[ConsiderAsNull(-1)]
,OrderId int not null
[Conditional("DEBUG")]
,InsertDateTime datetime
)
Run Code Online (Sandbox Code Playgroud)
这个例子有点做作,但希望我的问题更清楚.我认为反映这种元数据的能力可以使许多任务更容易实现自动化.那里有这样的东西吗?我正在使用SQL Server,但如果有其他DBMS的东西,那么我仍然有兴趣听到它.
在SQL Server 2005及更高版本中,您可以使用sp_addextendedproperty和fn_listextendedproperty(以及SSMS gui)设置和查看各种数据库项的描述.这是一个如何在表列上设置和查看描述的示例:
--code generated by SSMS to set a description on a table column
DECLARE @v sql_variant
SET @v = N'your description text goes here'
EXECUTE sp_addextendedproperty N'MS_Description', @v, N'SCHEMA', N'your_schema_name_here', N'TABLE', N'your_table_name_here', N'COLUMN', N'your_column_name_here'
--code to list descriptions for all columns in a table
SELECT * from fn_listextendedproperty (NULL, 'schema', 'your_schema_name_here', 'table', 'your_table_name_here', 'column', default);
Run Code Online (Sandbox Code Playgroud)