SELECT
    字段序号=a.colorder ,
    字段名=a.name ,
     外键字段所在的表=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
                THEN object_name(tony.rkeyid) ELSE ''
           END ,
     外键字段=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
                 THEN (SELECT name FROM syscolumns
                       WHERE colid=tony.fkey AND id=tony.fkeyid)      
                 ELSE ''
             END,
     类型=b.name 
FROM dbo.syscolumns a
    LEFT JOIN dbo.systypes b ON a.xtype = b.xusertype 
    INNER JOIN dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0
    LEFT JOIN sysobjects htl ON htl.parent_obj=d.id AND htl.xtype='F'
    LEFT JOIN sysforeignkeys tony on htl.id=tony.constid
WHERE d.name='Articles'  --这里输入包含表名称的条件
ORDER BY d.id, a.colorder

解决方案 »

  1.   

    SELECT DISTINCT
        字段序号=a.colorder ,
        字段名=a.name ,
         外键字段所在的表=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
                    THEN object_name(tony.rkeyid) ELSE ''
               END ,
         外键字段=CASE WHEN tony.fkey is not null and tony.fkey=a.colid
                     THEN (SELECT name FROM syscolumns
                           WHERE colid=tony.fkey AND id=tony.fkeyid)      
                     ELSE ''
                 END,
         类型=b.name 
    FROM dbo.syscolumns a
        LEFT JOIN dbo.systypes b ON a.xtype = b.xusertype 
        INNER JOIN dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0
        LEFT JOIN sysobjects htl ON htl.parent_obj=d.id AND htl.xtype='F'
        LEFT JOIN sysforeignkeys tony on htl.id=tony.constid
    WHERE d.name='Articles'  --这里输入包含表名称的条件
      

  2.   


    大侠  我给你描述一下遇到的问题:当Articles这个表中有一个外键字段的时候,不会出现结果重复字段的情况,当有两个外键字段的时候,就会出现每个字段重复两次,当有三个外键字段的时候,就会出现每个字段重复三次....
    您的这段代码我试了一下,Articles这个表的主键字段不再重复了  但是非主键字段(包含这个表的所有外键字段) 会重复出现两次   这是什么情况呢?
      

  3.   

     您的这段代码我试了一下,Articles这个表的主键字段不再重复了,但是外键字段 会重复出现两次   非主键和外键字段  不会出现重复情况了  这是什么情况呢?
      

  4.   


    我要做个代码生成器,思路是通过上面的查询结果存储在DataTable中,然后遍历这个DataTable中的每一行,生成代码。 在Model层的需求是,对表中的所有的外键字段  都作为对象来处理。如果查询结果出现重复字段的话  ,生成的代码在Model层,会出现重复的属性了
      

  5.   

    外键字段的信息如果要用列来显示,在遍历DataTable时候,很不方便吧?我没有思路了