20078888

技术前线

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

using Model;
using System;
using System.Text;

namespace DBUtility
{
    public class GetSqlString
    {
        public static string GetStoreProcedures()
        {
            return "select distinct(name) from sysobjects where type='p' ";
        }

        public static string GetTables(Database.DatabaseType type)
        {
            StringBuilder builder = new StringBuilder();
            switch (type)
            {
                case Database.DatabaseType.Sql2000:
                    builder.Append("SELECT d.name N'TableName',a.colorder N'FieldNumber',a.name N'FieldName', ");
                    builder.Append("(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '0' end) N'IsIdentifier',");
                    builder.Append("(case when (SELECT count(*) ");
                    builder.Append(" FROM sysobjects WHERE (name in (SELECT name FROM sysindexes ");
                    builder.Append(" WHERE (id = a.id) AND (indid in (SELECT indid FROM sysindexkeys");
                    builder.Append(" WHERE (id = a.id) AND (colid in (SELECT colid FROM syscolumns");
                    builder.Append(" WHERE (id = a.id) AND (name = a.name))))))) AND (xtype = 'PK'))>0 ");
                    builder.Append(" then '1' else '0' end) N'IsKeyField', b.name N'FieldType',a.length N'FieldSize', ");
                    builder.Append(" COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'FieldLength', ");
                    builder.Append(" isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'DecimalDigits', ");
                    builder.Append(" (case when a.isnullable=1 then '1'else '0' end) N'AllowNull', isnull(e.text,'') N'DefaultValue', ");
                    builder.Append(" isnull(g.[value],'') AS N'FieldDescn' ");
                    builder.Append(" FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d ");
                    builder.Append(" on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' left join syscomments e on a.cdefault=e.id ");
                    if (type == Database.DatabaseType.Sql2005)
                    {
                        builder.Append(" left join sys.extended_properties g on a.id=g.major_id AND a.colid = g.minor_id order by object_name(a.id),a.colorder");
                    }
                    else
                    {
                        builder.Append(" left join sysproperties g on a.id=g.id AND a.colid = g.smallid order by object_name(a.id),a.colorder ");
                    }
                    break;
                case Database.DatabaseType.Access:
                    builder.Append("SELECT d.name N'TableName',a.colorder N'FieldNumber',a.name N'FieldName', ");
                    builder.Append("(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '1'else '0' end) N'IsIdentifier',");
                    builder.Append("(case when (SELECT count(*) ");
                    builder.Append(" FROM sysobjects WHERE (name in (SELECT name FROM sysindexes ");
                    builder.Append(" WHERE (id = a.id) AND (indid in (SELECT indid FROM sysindexkeys");
                    builder.Append(" WHERE (id = a.id) AND (colid in (SELECT colid FROM syscolumns");
                    builder.Append(" WHERE (id = a.id) AND (name = a.name))))))) AND (xtype = 'PK'))>0 ");
                    builder.Append(" then '1' else '0' end) N'IsKeyField', b.name N'FieldType',a.length N'FieldSize', ");
                    builder.Append(" COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'FieldLength', ");
                    builder.Append(" isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'DecimalDigits', ");
                    builder.Append(" (case when a.isnullable=1 then '1'else '0' end) N'AllowNull', isnull(e.text,'') N'DefaultValue', ");
                    builder.Append(" isnull(g.[value],'') AS N'FieldDescn' ");
                    builder.Append(" FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d ");
                    builder.Append(" on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' left join syscomments e on a.cdefault=e.id ");
                
                    break;
            }
            return builder.ToString();
        }

        public static string GetViews()
        {
            return "select distinct(name) from sysobjects where type='v' ";
        }
    }
}

posted on 2010-05-07 17:34  许雪林  阅读(263)  评论(0)    收藏  举报