1.数据库中有那些用户表
select o.ID,O.Name from sysobjects o
where ObjectProperty(o.ID,N'IsTable')=1
and OBJECTPROPERTY(o.id, N'IsMSShipped')=0
and OBJECTPROPERTY(o.id, N'IsSystemTable')=0
and o.name not like N'#%'
2.名称为"TblName"的表有那些列,每个列的数据类型,长度
exec sp_MShelpcolumns N'[dbo].[TblName]'
3.名称为"TblName"的表的主键,外键信息
exec sp_MStablekeys N'[dbo].[TblName]'
4.名称为"TblName"的表有那些索引
sp_MShelpindex N'dbo.TblName', null, 1
5.取触发器
select o.name, owner = user_name(o.uid),
o.crdate, o.id
from dbo.sysobjects o
where o.deltrig = Object_ID(N'[dbo].[ch]')
and o.name not like '#%' order by o.name
declare
@tbname sysname--要取主键列名的表名
set @tbName='G_Right_Cert_House'
select name
from syscolumns
where id=object_id(@tbname)
and colid in(
select colid from sysindexkeys where object_id(@tbname)=id and indid in(
select indid from sysindexes where object_id(@tbname)=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=object_id(@tbname)
)))
聚集与非聚集索引
索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度
按照存储方式分为:聚集与非聚集索引
按照维护与管理索引角度分为:唯一索引、复合索引和系统自动创建的索引
索引的结构是由:根节点--->非叶节点--->非叶节点--->叶节点
1、聚集索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大
特点:
(1) 一个表可以最多可以创建249个索引
(2) 先建聚集索引才能创建非聚集索引
(3) 非聚集索引数据与索引不同序
(4) 数据与索引在不同位置
(5) 索引在叶节点上存储,在叶节点上有一个"指针"直接指向要查询的数据区域
(6) 数据不会根据索引键的顺序重新排列数据
创建聚集索引的语法:
create NONCLUSTERED INDEX idximpID ON EMP(empID)
2、非聚集索引:不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很少
特点:
(1) 无索引,数据无序
(2) 有索引,数据与索引同序
(3) 数据会根据索引键的顺序重新排列数据
(4) 一个表只能有一个索引
(5) 叶节点的指针指向的数据也在同一位置存储
语法:
create CLUSTERED INDEX idxempID on emp(empID)
3、惟一索引:惟一索引可以确保索引列不包含重复的值.
可以用多个列,但是索引可以确保索引列中每个值组合都是唯一的
姓 名
李 二
张 三
王 五
语法: create unique index idxempid on emp(姓,名)
4、复合索引:如果在两上以上的列上创建一个索引,则称为复合索引。
那么,不可能有两行的姓和名是重复的
语法:
create index indxfullname on addressbook(firstname,lastname)
5、系统自建的索引:在使用T_sql语句创建表的时候使用PRIMARY KEY或UNIQUE约束时,会在表上自动创建一个惟一索引
自动创建的索引是无法删除的
语法:
create table ABc
( empID int primary key,
firstname varchar(50)UNIQUE,
lastname varchar(50)UNIQUE,
)
这样的结果就出来了三个索引,但只有一个聚集索引哦
6、创建索引的方法:
1、企业管理器中
(1)右击某个表,所有任务---管理索引,打开管理索引,单击“新建”就可以创建索引
(2)在设计表中进行设计表,管理索引/键
(3)在关系图中,添加表后右击关系图中的某个表,就有“索引/键”
(4)通过向导,数据库---创建索引向导
(5)通过T-SQL语句
2、能过“索引优化向导”来优化索引的向导,通过它可以决定选择哪些列做为索引列
实验的流程:
1、先创建一个表,然后查看一下他的占用资源情况及select * from 表
看一下排序
2、然后创建索引,在观看一下占用资源的情况,及排序情况,看看聚集与非聚集的排序是
否用变化
答案是:聚集的有变化,非聚集的排序与未创建索引之前一样
字段是否存在
select count(1) from syscolumns where name = 'ColumnName'
and id in (select id from sysobjects where name = 'TableName')
结构
function GetTableStruc(Aconn: _Connection; ATableName: string): _recordSet;
var
sSql: string;
v: OleVariant;
begin
sSql := 'select c.name, c.colid, st.name as col_TypeName,'
+ ' case when bt.name in (N''nchar'', N''nvarchar'') then c.length/2 else c.length end as col_len,'
+ ' convert(bit, ColumnProperty(c.ID, c.name, N''AllowsNull'')) as col_AllowNull,'
+ ' convert(bit, ColumnProperty(c.ID, c.name, N''IsIdentity'')) as IsIdentity,'
+ ' isnull(OBJECTPROPERTY(cdefault, N''IsDefaultCnst''),0)as HasDefault'
+ ' from dbo.syscolumns c '
+ ' left outer join dbo.sysobjects d on d.id = c.cdefault '
+ ' left outer join dbo.sysobjects r on r.id = c.domain '
+ ' join dbo.systypes st on st.xusertype = c.xusertype '
+ ' join dbo.systypes bt on bt.xusertype = c.xtype '
+ ' where c.id = object_id(''%s'') ';
Result := Aconn.Execute(Format(sSql, [ATableName]), v, adCmdText);
end;