【转贴】获取sqlserver表的主键

转自:http://topic.csdn.net/t/20050124/12/3749111.html

select   主键=a.name  
  FROM   syscolumns   a  
  join   sysobjects   b  
  on   a.id=b.id       and   b.xtype='U'  
  and     b.name<>'dtproperties'  
  where  exists
  (
    SELECT   1  
      FROM   sysobjects  
      where   xtype='PK'  
      and   name   in
      (  
        SELECT   name  
          FROM   sysindexes  
          WHERE   indid  
          in
          (  
            SELECT   indid  
            FROM   sysindexkeys  
            WHERE   id   =   a.id   AND   colid=a.colid  
          )
       )
   )    
  and     b.name='表名'



转自:http://www.seaskyer.net/Index/Catalog15/285.html
 获取表信息
                             
SELECT 
    表名       
= case when a.colorder=1 then d.name else '' end,
    表说明     
= case when a.colorder=1 then isnull(f.value,''else '' end,
    字段名     
= a.name,
    主键       
= case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
                     
SELECT name FROM sysindexes WHERE indid in(
                        
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '' else '' end,
    类型       
= b.name,
    占用字节数 
= a.length,
    长度       
= COLUMNPROPERTY(a.id,a.name,'PRECISION'),
    默认值     
= isnull(e.text,''),
    字段说明   
= isnull(g.[value],'')
FROM 
    syscolumns a
left join 
    systypes b 
on 
    a.xusertype
=b.xusertype
inner join 
    sysobjects d 
on 
    a.id
=d.id  and d.xtype='U' and  d.name<>'dtproperties'
left join 
    syscomments e 
on 
    a.cdefault
=e.id
left join 
    sysproperties g 
on 
    a.id
=g.id and a.colid=g.smallid  
left join 
    sysproperties f 
on 
    d.id
=f.id and f.smallid=0
where 
    d.name
='LW_Equipment_Stock_List'    --如果只查询指定表,加上此条件


     获取表内所有字段
    
Select  Name   From SysColumns Where ID=OBJECT_ID('table1'Order By ColID

 下边是关于 Sysobjects的介绍

经常我们要查询表的索引,约束,相关性,触发器的属性,那么要知道sysobjects这个表的字段的意思,那么不管要查什么都没有问题!

Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。
Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。
对象类型(xtype)。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
当xtype='U' and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。
用: select * from misa.dbo.sysobjects where xtype='U' and status>0 就可以列出库misa中所有的用户建立的表名。
 
SELECT * FROM SYSOBJECTS WHERE PARENT_OBJ = OBJECT_ID( 'CS') AND XTYPE='TR'
列出表cs的所有属性,上面是trigger!
posted @ 2008-01-05 13:58  N/A2011  阅读(1498)  评论(0编辑  收藏  举报