一般来说,元数据函数返回的是有关指定数据库和数据对象的信息。下面介绍几种元数据函数。
1、COL_NAME(tab_id,col_id),返回表tab_id的tab_id的列名。
例:selectCOL_NAME(OBJECT_ID('employees'),3); 结果为’FirstName’
2、COLUMNPROPERTY(id,col,property),返回指定列的信息。property属于以下值:
值 | 说明 |
AllowsNull | 允许空值。1 = TRUE,0 = FALSE,NULL = 输入无效。 |
ColumnId | 对应于 sys.columns.column_id 的列 ID 值。 |
FullTextTypeColumn | 表中的 TYPE COLUMN,其中包含 column 的文档类型信息。 |
IsComputed | 列是计算列。1 = TRUE,0 = FALSE,NULL = 输入无效。 |
IsCursorType | 过程参数类型为 CURSOR。1 = TRUE,0 = FALSE,NULL = 输入无效。 |
IsDeterministic | 列是确定性列。此属性只适用于计算列和视图列。1 = TRUE,0 = FALSE,NULL = 输入无效。非计算列或视图列。 |
IsFulltextIndexed | 列已经注册为全文索引。1 = TRUE,0 = FALSE,NULL = 输入无效。 |
IsIdentity | 列使用 IDENTITY 属性。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsIdNotForRepl | 列检查 IDENTITY_INSERT 设置。如果指定了 IDENTITY NOT FOR REPLICATION,则不检查 IDENTITY_INSERT 设置。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsIndexable | 可以对列进行索引。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsOutParam | 过程参数是输出参数。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsPrecise | 列是精确列。此属性只适用于确定性列。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsRowGuidCol | 列具有 uniqueidentifier 数据类型,并且定义了 ROWGUIDCOL 属性。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsSystemVerified | 列的确定性和精度属性可以使用 数据库引擎 验证。此属性只应用于计算列和视图中的列。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsXmlIndexable | 可以在 XML 索引中使用 XML 列。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
Precision | 列或参数的数据类型的长度。指定的列数据类型的长度,-1 = xml 或大值类型,NULL = 输入无效。 |
Scale | 列或参数的数据类型的小数位数。 |
SystemDataAccess | 列是由访问 SQL Server 的系统目录或虚拟系统表中数据的函数派生的。此属性只应用于计算列和视图中的列。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
UserDataAccess | 列是由访问储存于 SQL Server 本地实例的用户表中数据的函数派生的。此属性只应用于计算列和视图中的列。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
UsesAnsiTrim | 第一次创建表时,ANSI_PADDING 设置为 ON。此属性仅应用于列或者 char 或 varchar 类型的参数。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsSparse | 列为稀疏列。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
IsColumnSet | 列为列集。1 = TRUE,0 = FALSE, NULL = 输入无效。 |
3、DATABASEPROPERYTY(database,property),返回指定的数据库的指定数据库属性值。
4、DB_ID([db_name]),返回数据库的db_name的标识符,即返回当前数据库的标识符。
例: selectDB_ID('Master'),结果为1
5、DB_NAME([db_id]),返回带有标识符db_id的数据库名,如果没有指定标识符,就显示当前数据名称。
例:selectDB_NAME(1),结果为’master’
6、INDEX_COL(table,i,no),返回表table中的索引列,该索引列有索引标识符i及该列在索引中的位置no指定。
7、INDEXPROPERY(obj_id,index_name,property),返回指定表标识号、索引或统计名称及属性名称的指定索引值或统计属性值。
8、OBJECT_NAME(obj_id),返回有标识符obj_id的数据库对象名称。
例:selectOBJECT_NAME(245575913),结果为‘Products’
9、OBJECT_ID(obj_name),返回数据库对象obj_name对应的标识符。
例:selectOBJECT_ID('products'); 结果为245575913
9、OBJECTPROPERTY(obj_id,property),返回当前数据对象。property为以下值:
属性名称 | 说明 |
CnstIsClustKey | 具有聚集索引的 PRIMARY KEY 约束。1 = True,0 = False |
CnstIsColumn | 单个列上的 CHECK、DEFAULT 或 FOREIGN KEY 约束。1 = True,0 = False |
CnstIsDeleteCascade | 具有 ON DELETE CASCADE 选项的 FOREIGN KEY 约束。1 = True,0 = False |
CnstIsDisabled | 禁用的约束。1 = True,0 = False |
CnstIsNonclustKey | 非聚集索引的 PRIMARY KEY 或 UNIQUE 约束。1 = True,0 = False |
CnstIsNotRepl | 使用 NOT FOR REPLICATION 关键字定义的约束。1 = True,0 = False |
CnstIsNotTrusted | 启用约束时未检查现有行,因此可能不是所有行都适用该约束。1 = True,0 = False |
CnstIsUpdateCascade | 具有 ON UPDATE CASCADE 选项的 FOREIGN KEY 约束。1 = True,0 = False |
ExecIsAfterTrigger | AFTER 触发器。1 = True,0 = False |
ExecIsAnsiNullsOn | 创建时的 ANSI_NULLS 设置。1 = True,0 = False |
ExecIsDeleteTrigger | DELETE 触发器。1 = True,0 = False |
ExecIsFirstDeleteTrigger | 对表执行 DELETE 时触发的第一个触发器。1 = True,0 = False |
ExecIsFirstInsertTrigger | 对表执行 INSERT 时触发的第一个触发器。1 = True,0 = False |
ExecIsFirstUpdateTrigger | 对表执行 UPDATE 时触发的第一个触发器。1 = True,0 = False |
ExecIsInsertTrigger | INSERT 触发器。1 = True,0 = False |
ExecIsInsteadOfTrigger | INSTEAD OF 触发器。1 = True,0 = False |
ExecIsLastDeleteTrigger | 对表执行 DELETE 时激发的最后一个触发器。1 = True,0 = False |
ExecIsLastInsertTrigger | 对表执行 INSERT 时激发的最后一个触发器。1 = True,0 = False |
ExecIsLastUpdateTrigger | 对表执行 UPDATE 时激发的最后一个触发器。1 = True,0 = False |
ExecIsQuotedIdentOn | 创建时的 QUOTED_IDENTIFIER 设置1 = True,0 = False |
ExecIsStartup | 启动过程。1 = True,0 = False |
ExecIsTriggerDisabled | 禁用的触发器。1 = True,0 = False |
ExecIsTriggerNotForRepl | 定义为 NOT FOR REPLICATION 的触发器。1 = True,0 = False |
ExecIsUpdateTrigger | UPDATE 触发器。1 = True,0 = False |
HasAfterTrigger | 表或视图具有 AFTER 触发器。1 = True,0 = False |
HasDeleteTrigger | 表或视图具有 DELETE 触发器。1 = True,0 = False |
HasInsertTrigger | 表或视图具有 INSERT 触发器。1 = True,0 = False |
HasInsteadOfTrigger | 表或视图具有 INSTEAD OF 触发器。1 = True,0 = False |
HasUpdateTrigger | 表或视图具有 UPDATE 触发器。1 = True,0 = False |
IsAnsiNullsOn | 指定表的 ANSI NULLS 选项设置为 ON。这表示所有对空值的比较都取值为 UNKNOWN。只要表存在,此设置将应用于表定义中的所有表达式,包括计算列和约束。1 = True,0 = False |
IsCheckCnst | CHECK 约束。1 = True,0 = False |
IsConstraint | 列或表的单列 CHECK、DEFAULT 或 FOREIGN KEY 约束。1 = True,0 = False |
IsDefault | 绑定的默认值。1 = True,0 = False |
IsDefaultCnst | DEFAULT 约束。1 = True,0 = False |
IsDeterministic | 函数或视图的确定性属性。1 = True,0 = False |
IsEncrypted | 指示模块语句的原始文本已转换为模糊格式。模糊代码的输出在 SQL Server 2005 的任何目录视图中都不能直接显示。对系统表或数据库文件没有访问权限的用户不能检索模糊文本。但是,能够通过 DAC 端口访问系统表的用户或能够直接访问数据库文件的用户可以检索此文本。此外,能够向服务器进程附加调试器的用户可在运行时从内存中检索原始过程。1 = 已加密,0 = 未加密,基本数据类型:int |
IsExecuted | 可执行对象(视图、过程、函数或触发器)。1 = True,0 = False |
IsExtendedProc | 扩展过程。1 = True,0 = False |
IsForeignKey | FOREIGN KEY 约束。1 = True,0 = False |
IsIndexed | 包含索引的表或视图。1 = True,0 = False |
IsIndexable | 可以创建索引的表或视图。1 = True,0 = False |
IsInlineFunction | 内联函数。1 = True,0 = False |
IsMSShipped | 安装 SQL Server 过程中创建的对象。1 = True,0 = False |
IsPrimaryKey | PRIMARY KEY 约束。1 = True,0 = False ,NULL = 非函数,或对象 ID 无效。 |
IsProcedure | 过程。1 = True,0 = False |
IsQuotedIdentOn | 指定对象的引号标识符设置为 ON。这表示用英文双引号分隔对象定义中涉及的所有表达式中的标识符。1 = ON,0 = OFF |
IsQueue | Service Broker 队列.1 = True,0 = False |
IsReplProc | 复制过程。1 = True,0 = False |
IsRule | 绑定规则。1 = True,0 = False |
IsScalarFunction | 标量值函数。1 = 标量值函数,0 = 非标量值函数 |
IsSchemaBound | 使用 SCHEMABINDING 创建的绑定到架构的函数或视图。1 = 绑定到架构,0 = 不绑定架构。 |
IsSystemTable | 系统表。1 = True,0 = False |
IsTable | 表。1 = True,0 = False |
IsTableFunction | 表值函数。1 = 表值函数.0 = 非表值函数 |
IsTrigger | 触发器。1 = True,0 = False |
IsUniqueCnst | UNIQUE 约束。1 = True,0 = False |
IsUserTable | 用户定义的表。1 = True,0 = False |
IsView | 视图。1 = True,0 = False |
OwnerId | 对象的所有者。 |
TableDeleteTrigger | 表具有 DELETE 触发器。>1 = 指定类型的第一个触发器的 ID。 |
TableDeleteTriggerCount | 表具有指定数目的 DELETE 触发器。>0 = DELETE 触发器数目。 |
TableFullTextMergeStatus | 表所具有的全文索引当前是否正在合并。0 = 表没有全文索引,或者全文索引未在合并。1 = 全文索引正在合并。 |
TableFullTextBackgroundUpdateIndexOn | 表已启用全文后台更新索引(自动更改跟踪)。1 = True,0 = False |
TableFulltextCatalogId | 表的全文索引数据所在的全文目录的 ID。非零 = 全文目录 ID,它与全文索引表中标识行的唯一索引相关。0 = 表没有全文索引。 |
TableFulltextChangeTrackingOn | 表已启用全文更改跟踪。1 = True,0 = False |
TableFulltextDocsProcessed | 自开始全文索引以来所处理的行数。在为进行全文搜索而正在编制索引的表中,将一个行的所有列视为要编制索引的文档的一部分。0 = 没有完成的活动爬网或全文索引。> 0 = 以下选项之一: · 自从开始完整、增量或手动更改跟踪填充以来,由插入或更新操作处理的文档数。 · 自从执行以下操作以来由插入或更新操作处理的行数:启用具有后台更新索引填充功能的更改跟踪、更改全文索引架构、重建全文目录或重新启动 SQL Server 的实例等。 NULL = 表没有全文索引。 |
TableFulltextFailCount | 全文搜索未编制索引的行数。 0 = 填充已完成。 > 0 = 以下选项之一: · 自从开始完整、增量和手动更新更改跟踪填充以来未编制索引的文档数。 · 对于具有后台更新索引功能的更改跟踪,则为自从开始填充或重新启动填充以来未编制索引的行数。这可能由架构更改、目录重建、服务器重新启动等引起。 NULL = 表没有全文索引。 |
TableFulltextItemCount | 成功编制了全文索引的行数。 |
TableFulltextKeyColumn | 与参与全文索引定义的单列唯一索引关联的列的 ID。 0 = 表没有全文索引。 |
TableFulltextPendingChanges | 要处理的挂起更改跟踪项的数目。 0 = 未启用更改跟踪。 NULL = 表没有全文索引。 |
TableFulltextPopulateStatus | 0 = 空闲。 1 = 正在进行完全填充。 2 = 正在进行增量填充。 3 = 正在传播所跟踪的更改。 4 = 正在进行后台更新索引(例如,自动跟踪更改)。 5 = 全文索引已中止或暂停。 |
TableHasActiveFulltextIndex | 表具有活动的全文索引。 1 = True 0 = False |
TableHasCheckCnst | 表具有 CHECK 约束。 1 = True 0 = False |
TableHasClustIndex | 表具有聚集索引。 1 = True 0 = False |
TableHasDefaultCnst | 表具有 DEFAULT 约束。 1 = True 0 = False |
TableHasDeleteTrigger | 表具有 DELETE 触发器。 1 = True 0 = False |
TableHasForeignKey | 表具有 FOREIGN KEY 约束。 1 = True 0 = False |
TableHasForeignRef | 表由 FOREIGN KEY 约束引用。 1 = True 0 = False |
TableHasIdentity | 表具有标识列。 1 = True 0 = False |
TableHasIndex | 表具有任意类型的索引。 1 = True 0 = False |
TableHasInsertTrigger | 对象具有 INSERT 触发器。 1 = True 0 = False |
TableHasNonclustIndex | 表有非聚集索引。 1 = True 0 = False |
TableHasPrimaryKey | 表具有主键。 1 = True 0 = False |
TableHasRowGuidCol | 表的 uniqueidentifier 列具有 ROWGUIDCOL。 1 = True 0 = False |
TableHasTextImage | 表具有 text、ntext 或 image 列。 1 = True 0 = False |
TableHasTimestamp | 表具有 timestamp 列。 1 = True 0 = False |
TableHasUniqueCnst | 表具有 UNIQUE 约束。 1 = True 0 = False |
TableHasUpdateTrigger | 对象有 UPDATE 触发器。 1 = True 0 = False |
TableHasVarDecimalStorageFormat | 为 vardecimal 存储格式启用表。 1 = True 0 = False |
TableInsertTrigger | 表具有 INSERT 触发器。 >1 = 指定类型的第一个触发器的 ID。 |
TableInsertTriggerCount | 表有指定数目的 INSERT 触发器。 >0 = INSERT 触发器的个数。 |
TableIsFake | 表不是真实的表。它将由 SQL Server 数据库引擎根据需要在内部进行具体化。 1 = True 0 = False |
TableIsLockedOnBulkLoad | bcp 或 BULK INSERT 作业导致表被锁。 1 = True 0 = False |
TableIsPinned | 驻留表以将其保留在数据缓存中。 0 = False SQL Server 2005 及更高版本不支持此功能。 |
TableTextInRowLimit | text in row 允许的最大字节数。 如果未设置 text in row 选项,则返回 0。 |
TableUpdateTrigger | 表具有 UPDATE 触发器。 >1 = 指定类型的第一个触发器的 ID。 |
TableUpdateTriggerCount | 表有指定数目的 UPDATE 触发器。 > 0 = UPDATE 触发器的个数。 |
TableHasColumnSet | 表具有列集。 0 = False 1 = True 有关详细信息,请参阅使用列集。 |