在SQLServer中的约束如:主键约束、外键约束、check约束、default约束分别可以通过方法getPrimaryKey()、getCrossReferences()、以及系统表sysconstraints、syscomments、sysobjects得到他们的详细信息(比如default约束可以得到约束名,所在的表,约束所在的列,约束内容等)
     但对于unique约束我不知道该如何提取它的详细信息。
     在系统表sysconstraints中,列colid的说明是:在其上定义约束的列 ID,如果是表约束则为 0。  对于default约束,check约束这一列都指明了约束作用的列号,但对于unique约束这一列的值却是0!就是说unique约束是个表约束!?一个表可以拥有多个unique约束,他们可以分别作用于不同的列,如果unique约束是个表约束的话,我该怎么才能知道它作用的列名呢??(不知道有没有JDBC方法可以想提取外键约束一样直接提取出unique约束的详细信息??)
  谢谢!!!

解决方案 »

  1.   

    select * from sysobjects where id in (select id from sysconstraints)
    因为sysconstraints中的id为Table的id
      

  2.   

    SELECT  tbname = O.Name, UNIQUEName = OU.name,
    ColName = C.name, Colid = C.colid
    FROM sysindexes IX, sysindexkeys IXK, syscolumns C, sysobjects OU, sysobjects O
    WHERE IX.indid NOT IN(0, 255)
    AND IX.id = IXK.id
    AND IX.indid = IXK.indid
    AND IX.id = c.id
    AND IXK.colid = C.colid
    AND OU.parent_obj = IX.id
    AND OU.xtype = 'UQ'
    AND OU.name = IX.name
    AND O.xtype = 'U'
    AND O.id = IX.id
    ORDER BY tbname, UNIQUEName
      

  3.   

    谢谢 zjcxc(邹建)  问题已经解决了!!!!