SQL SERVER 系统存储过程、用户自定义函数、数据库中的表、OBJECTPROPERTY ( ID , PROPERTY )

[文章] 浏览(47)  | 2017年05月26日  | 支持服务 | 
[标签]MS SQL

注:未特别指明时,以下都是在当前数据库AdventureWorks

查询数据库中的表名:

use AdventureWorks 
--查询所有表的信息
select * from sysobjects where xtype='U'; 
--查询表的数量
select count(*) from sysobjects where xtype='U' 
--这是快速查询所有表中的数据量
select a.name, b.rows from sysobjects a with(nolock) join sysindexes b with(nolock) on b.id=a.id
where a.xtype='U' and b.indid in (0,1) order by a.name asc 

返回指定数据库AdventureWorks表AWBuildVersion或视图的列的详细信息。

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'ColumnID') AS COLUMN_ID,*
FROM AdventureWorks.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'AWBuildVersion';

系统存储过程

sp_server_info 									--返回当前服务器的各种特性及其对应取值。
sp_databases 									--返回当前服务器上的所有数据库的基本信息。
sp_tables 										--返回当前数据库的所有表和视图,包含系统表。 use AdventureWorks
sp_columns @table_name = 'AWBuildVersion'		--返回指定数据库AdventureWorks表AWBuildVersion或视图的列的详细信息 use AdventureWorks 
sp_statistics  @table_name = 'AWBuildVersion'	--返回指定数据库AdventureWorks表AWBuildVersion或视图的所有索引以及统计的信息。 use AdventureWorks 
sp_stored_procedures 							--返回当前数据库的存储过程列表,包含系统存储过程。 use AdventureWorks 
sp_sproc_columns @procedure_name = 'ufnGetAccountingEndDate'	--返回指定存储过程GetPYCode的的输入、输出参数的信息。

返回指定数据库AdventureWorks中用户自定义函数的详细信息

select * from dbo.sysobjects where xtype in (N'FN', N'IF', N'TF')

用户自定义的存储过程

1、列出数据库AdventureWorks 全部用户自定义的存储过程

SELECT * FROM sys.objects WHERE type in (N'P', N'PC')

2、列出数据库AdventureWorks 用户自定义的存储过程uspPrintError

SELECT * FROM sys.objects WHERE type in (N'P', N'PC') and object_id = OBJECT_ID(N'[dbo].[uspPrintError]')

3、判断存储过程uspPrintError是否存在

IF  EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[uspPrintError]') AND type in (N'P', N'PC'))
	print '[uspPrintError] EXISTS'
Else
	print '[uspPrintError] not EXISTS'

返回当前数据库中对象的有关信息 OBJECTPROPERTY 

语法
OBJECTPROPERTY ( id , property )

参数
id

一个表达式,包含当前数据库中某个对象的 ID。id 的数据类型是 int。

Property

一个表达式,包含针对由 id 指定的对象将要返回的信息。Property 可以是下面这些值中的一个。

返回值

1 = True
0 = False
null = 无效

例:判断存储过程uspPrintError是否存在

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[uspPrintError]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

    print 'Yes'

例:测试 authors 是否为一个表

IF OBJECTPROPERTY ( object_id('AWBuildVersion'),'ISTABLE') = 1
    print 'AWBuildVersion is a table'

例:测试 uspPrintError是否为一个存储过程

IF OBJECTPROPERTY ( object_id('uspPrintError'),'IsProcedure') = 1
    print 'AWBuildVersion is a Procedure'

属性名称

对象类型 描述和返回的值
CnstIsClustKey 约束 带有聚集索引的主键
CnstIsColumn 约束 COLUMN 约束
CnstIsDeleteCascade 约束 带有 ON DELETE CASCADE 选项的外键约束
CnstIsDisabled 约束 禁用的约束
CnstIsNonclustKey 约束 带有非聚集索引的主键
CnstIsNotTrusted 约束 启用约束时未检查现有行,所以可能不是所有行都受约束的控制
CnstIsNotRepl 约束 使用 NOT FOR REPLICATION 关键字定义约束
CnstIsUpdateCascade 约束 带有 ON UPDATE CASCADE 选项的外键约束
ExecIsAfterTrigger 触发器 AFTER 触发器
ExecIsAnsiNullsOn 过程、触发器、视图 创建时的 ANSI_NULLS 设置
ExecIsDeleteTrigger 触发器 DELETE 触发器
ExecIsFirstDeleteTrigger 触发器  对表执行 DELETE 时触发的第一个触发器
ExecIsFirstInsertTrigger 触发器  对表执行 INSERT 时触发的第一个触发器
ExecIsFirstUpdateTrigger 触发器  对表执行 UPDATE 时触发的第一个触发器
ExecIsInsertTrigger 触发器  对表执行 INSERT 触发器
ExecIsInsteadOfTrigger  触发器 INSTEAD OF 触发器
ExecIsLastDeleteTrigger  触发器 对表执行 DELETE 时触发的最后一个触发器
ExecIsLastInsertTrigger  触发器 对表执行 INSERT 时触发的最后一个触发器
ExecIsLastUpdateTrigger 触发器 对表执行 UPDATE 时触发的最后一个触发器
ExecIsQuotedIdentOn 过程、触发器、视图 创建时的 QUOTED_IDENTIFIER 设置
ExecIsStartup 过程 启动过程
ExecIsTriggerDisabled  触发器 禁用的触发器
ExecIsUpdateTrigger 触发器 UPDATE 触发器
HasAfterTrigger 表,视图 表或视图具有 AFTER 触发器
HasInsertTrigger 表,视图 表或视图具有 INSERT 触发器
HasInsteadOfTrigger 表、视图 表或视图具有 INSTEAD OF 触发器
HasUpdateTrigger 表、视图 表或视图具有 UPDATE 触发器
IsAnsiNullsOn 函数、过程、表、触发器、视图 指定表的 ANSI NULLS 选项设置为 ON,表示所有与空值的比较都取值为 UNKNOWN。只要表存在,该设置就应用于表定义中的所有表达式,包括计算列和约束
IsCheckCnst 任何 CHECK 约束
IsConstraint 任何 约束
IsDefault 任何 绑定的默认值
IsDefaultCnst 任何 DEFAULT 约束
IsDeterministic 函数、视图

函数的确定性属性。只适用于标量值及表值函数 1 = 可确定的 0 = 不可确定的 NULL = 不是标量值或表值函数,或者是无效的对象 ID

IsExecuted 任何 指定执行该对象的方式(视图、过程或触发器)
IsExtendedProc 任何 扩展过程
IsForeignKey 任何 FOREIGN KEY 约束
IsIndexed 任何 带有索引的表或视图 1 = 内嵌函数 0 = 非内嵌函数 NULL = 不是函数,或者是无效的对象 ID
IsIndexable 表、视图 可以创建索引的表或视图 1 = 内嵌函数 0 = 非内嵌函数 NULL = 不是函数,或者是无效的对象 ID
IsInlineFunction 函数 内嵌函数 1 = 内嵌函数 0 = 非内嵌函数 NULL = 不是函数,或者是无效的对象 ID
IsMSShipped 任何 在安装 Microsoft® SQL Server™ 2000 的过程中创建的对象
IsPrimaryKey 任何 PRIMARY KEY 约束
IsProcedure 任何 过程
IsQuotedIdentOn 函数、过程、表、触发器、视图 指定表的被引用标识符设置为 ON,表示在表定义所涉及的所有表达式中,双引号标记分隔标识符
IsReplProc 任何 复制过程
IsRule 任何 绑定的规则
IsScalarFunction 函数 标量值函数
IsSchemaBound 函数,视图 使用 SCHEMABINDING 创建的架构绑定函数或视图
IsSystemTable 系统表
IsTable
IsTableFunction 函数 表值函数
IsTrigger  任何 触发器
IsUniqueCnst 任何 UNIQUE 约束
IsUserTable 用户定义的表
IsView 视图 视图
OwnerId 任何 对象的所有者
TableDeleteTrigger 表有 DELETE 触发器
TableDeleteTriggerCount 表具有指定数目的 DELETE 触发器
TableFullTextBackgroundUpdateIndexOn 表已启用全文后台更新索引
TableFulltextCatalogId 表的全文索引数据所驻留的全文目录的 ID。 Nonzero = 全文目录 ID,它与标识全文索引表中行的唯一索引相关
TableFullTextChangeTrackingOn 表已启用全文更改跟踪
TableFulltextKeyColumn 与某个单列唯一索引相关联的列 ID,这个单列唯一索引参与全文索引定义
TableFullTextPopulateStatus 0 = 不填充
TableHasActiveFulltextIndex 表具有一个活动的全文索引
TableHasCheckCnst 表具有 CHECK 约束
TableHasClustIndex 表具有聚集索引
TableHasDefaultCnst 表具有 DEFAULT 约束
TableHasDeleteTrigger 表具有 DELETE 触发器
TableHasForeignKey 表具有 FOREIGN KEY 约束
TableHasForeignRef 表由 FOREIGN KEY 约束引用
TableHasIdentity 表具有标识列
TableHasIndex 表具有一个任何类型的索引
TableHasInsertTrigger 对象具有 Insert 触发器
TableHasNonclustIndex 表具有非聚集索引
TableHasPrimaryKey 表具有主键
TableHasRowGuidCol 对于 uniqueidentifier 列,表具有 ROWGUIDCOL
TableHasTextImage 表具有 text 列
TableHasTimestamp 表具有 timestamp 列
TableHasUniqueCnst 表具有 UNIQUE 约束
TableHasUpdateTrigger 对象具有 Update 触发器
TableInsertTrigger 表具有 INSERT 触发器
TableInsertTriggerCount 表具有指定数目的 INSERT 触发器
TableIsFake 表不是真实的。根据需要 SQL Server 对其进行内部具体化
TableIsPinned 驻留表以将其保留在数据高速缓存中
TableTextInRowLimit text in row 所允许的最大字节数,如果没有设置 text in row 选项则为 0。 TableUpdateTrigger 表 表具有 UPDATE 触发器。 >1 = 给定类型的第一个触发器的 ID
TableUpdateTriggerCount 表具有指定数目的 UPDATE 触发器。 >1 = 给定类型的第一个触发器的 ID。
附件说明
附件