SqlSever用Sql脚本取数据表结构

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

 

 2006-10-30 16:17:48   

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、然后创建索引,在观看一下占用资源的情况,及排序情况,看看聚集与非聚集的排序是
  否用变化
 答案是:聚集的有变化,非聚集的排序与未创建索引之前一样

 

 2007-1-11 10:07:11    字段是否存在

select count(1) from syscolumns where name = 'ColumnName'
and id in (select id from sysobjects where name = 'TableName')

 

 2007-1-12 11:39:43    结构

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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值