zoukankan      html  css  js  c++  java
  • 研究代码生成器~得到数据库中的表的结构和字段名称

    一。Sql 2000得到表字段详细信息。
    SELECT
    colorder=a.colorder,--列号
    ColumnName=a.name,  --列名称
    TypeName=b.name,    --列类型
    Length=(case when b.name='nvarchar' then a.length/2 else a.length end), --列长度
    Preci=COLUMNPROPERTY(a.id,a.name,'PRECISION'),   --列精度
    Scale=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0), --刻度
    IsIdentity=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, --是否自动增长
    isPK=case when 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
    ))) then '√' else '' end,                                                            --是否是主键
    cisNull=case when a.isnullable=1 then '√'else '' end, --是否允许为空
    defaultVal=isnull(e.text,''), --默认值
    deText=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' or d.xtype='V') 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
    where d.name='OrderLog'   --这里是表的名称
    order by a.id,a.colorder

    二。Sql2005得到表字段详细信息。
    SELECT
    colorder=C.column_id,
    ColumnName=C.name,
    TypeName=T.name,
    Length=C.max_length,
    Preci=C.precision,
    Scale=C.scale,
    IsIdentity=CASE WHEN C.is_identity=1 THEN N'\u221a'ELSE N'' END,
    isPK=ISNULL(IDX.PrimaryKey,N''),
    Computed=CASE WHEN C.is_computed=1 THEN N'\u221a'ELSE N'' END,
    IndexName=ISNULL(IDX.IndexName,N''),
    IndexSort=ISNULL(IDX.Sort,N''),
    Create_Date=O.Create_Date,
    Modify_Date=O.Modify_date,
    cisNull=CASE WHEN C.is_nullable=1 THEN N'\u221a'ELSE N'' END,
    defaultVal=ISNULL(D.definition,N''),
    deText=ISNULL(PFD.[value],N'')
    FROM sys.columns C
    INNER JOIN sys.objects O
    ON C.[object_id]=O.[object_id]
    AND O.type='U'
    AND O.is_ms_shipped=0
    INNER JOIN sys.types T
    ON C.user_type_id=T.user_type_id
    LEFT JOIN sys.default_constraints D
    ON C.[object_id]=D.parent_object_id
    AND C.column_id=D.parent_column_id
    AND C.default_object_id=D.[object_id]
    LEFT JOIN sys.extended_properties PFD
    ON PFD.class=1 
    AND C.[object_id]=PFD.major_id 
    AND C.column_id=PFD.minor_id
    LEFT JOIN sys.extended_properties PTB
    ON PTB.class=1
    AND PTB.minor_id=0 
    AND C.[object_id]=PTB.major_id
    LEFT JOIN
    (
    SELECT 
    IDXC.[object_id],
    IDXC.column_id,
    Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
    WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
    PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N'\u221a'ELSE N'' END,
    IndexName=IDX.Name
    FROM sys.indexes IDX
    INNER JOIN sys.index_columns IDXC
    ON IDX.[object_id]=IDXC.[object_id]
    AND IDX.index_id=IDXC.index_id
    LEFT JOIN sys.key_constraints KC
    ON IDX.[object_id]=KC.[parent_object_id]
    AND IDX.index_id=KC.unique_index_id
    INNER JOIN 
    (
    SELECT [object_id], Column_id, index_id=MIN(index_id)
    FROM sys.index_columns
    GROUP BY [object_id], Column_id
    ) IDXCUQ
    ON IDXC.[object_id]=IDXCUQ.[object_id]
    AND IDXC.Column_id=IDXCUQ.Column_id
    AND IDXC.index_id=IDXCUQ.index_id
    ) IDX
    ON C.[object_id]=IDX.[object_id]
    AND C.column_id=IDX.column_id 
    WHERE O.name=N'" + TableName + "'   --这里是表的名称
    ORDER BY O.name,C.column_id 


    三。Oracle得到表字段详细信息。
    select
    COLUMN_ID as colorder, 
    COLUMN_NAME as ColumnName,
    DATA_TYPE as TypeName,
    DATA_LENGTH as Length,
    DATA_PRECISION as Preci,
    DATA_SCALE as Scale,
    '' as IsIdentity,
    '' as isPK,
    "NULLABLE as cisNull ,
    DATA_DEFAULT as defaultVal,
    '' as deText
    from USER_TAB_COLUMNS
    where TABLE_NAME='" + TableName + "'   //这里是表名称
    order by COLUMN_ID

    四。其他的数据库的表字段结构的详细。

      public DataTable GetOleDbSchemaTable(Guid schema, object[] restrictions)
      {
       DataTable table1;
       IntPtr ptr1;
       OleDbConnection.ExecutePermission.Demand();
       Bid.ScopeEnter(out ptr1, "<oledb.OleDbConnection.GetOleDbSchemaTable|API> %d#, schema=%p{GUID}, restrictions\n", this.ObjectID, schema);
       try
       {
        this.CheckStateOpen("GetOleDbSchemaTable");
        OleDbConnectionInternal internal1 = this.GetOpenConnection();
        if (OleDbSchemaGuid.DbInfoLiterals == schema)
        {
         if ((restrictions != null) && (restrictions.Length != 0))
         {
          throw ODB.InvalidRestrictionsDbInfoLiteral("restrictions");
         }
         return internal1.BuildInfoLiterals();
        }
        if (OleDbSchemaGuid.SchemaGuids == schema)
        {
         if ((restrictions != null) && (restrictions.Length != 0))
         {
          throw ODB.InvalidRestrictionsSchemaGuids("restrictions");
         }
         return internal1.BuildSchemaGuids();
        }
        if (OleDbSchemaGuid.DbInfoKeywords == schema)
        {
         if ((restrictions != null) && (restrictions.Length != 0))
         {
          throw ODB.InvalidRestrictionsDbInfoKeywords("restrictions");
         }
         return internal1.BuildInfoKeywords();
        }
        if (!internal1.SupportSchemaRowset(schema))
        {
         IDBSchemaRowsetWrapper wrapper1 = internal1.IDBSchemaRowset();
         try
         {
          if (wrapper1.Value == null)
          {
           throw ODB.SchemaRowsetsNotSupported(this.Provider);
          }
         }
         finally
         {
          wrapper1.Dispose();
         }
         throw ODB.NotSupportedSchemaTable(schema, this);
        }
        return internal1.GetSchemaRowset(schema, restrictions);
       }
       finally
       {
        Bid.ScopeLeave(ref ptr1);
       }
       return table1;
      }
      private DataTable Tab2Colum(DataTable sTable)
      {
       DataTable table1 = new DataTable();
       table1.Columns.Add("colorder");
       table1.Columns.Add("ColumnName");
       table1.Columns.Add("TypeName");
       table1.Columns.Add("Length");
       table1.Columns.Add("Preci");
       table1.Columns.Add("Scale");
       table1.Columns.Add("IsIdentity");
       table1.Columns.Add("isPK");
       table1.Columns.Add("cisNull");
       table1.Columns.Add("defaultVal");
       table1.Columns.Add("deText");
       int num1 = 0;
       foreach (DataRow row1 in sTable.Select("", "ORDINAL_POSITION asc"))
       {
        DataRow row2 = table1.NewRow();
        row2["colorder"] = row1[6].ToString();
        row2["ColumnName"] = row1[3].ToString();
        string text1 = row1[11].ToString();
        switch (row1[11].ToString())
        {
         case "3":
          text1 = "int";
          goto Label_01CE;

         case "5":
          text1 = "float";
          goto Label_01CE;

         case "6":
          text1 = "money";
          goto Label_01CE;

         case "7":
          text1 = "datetime";
          goto Label_01CE;

         case "11":
          text1 = "bool";
          break;

         case "130":
          text1 = "varchar";
          break;
        }
       Label_01CE:
        row2["TypeName"] = text1;
        row2["Length"] = row1[13].ToString();
        row2["Preci"] = row1[15].ToString();
        row2["Scale"] = row1[0x10].ToString();
        row2["IsIdentity"] = "";
        row2["isPK"] = "";
        if (row1[10].ToString().ToLower() == "true")
        {
         row2["cisNull"] = "";
        }
        else
        {
         row2["cisNull"] = "\u221a";
        }
        row2["defaultVal"] = row1[8].ToString();
        row2["deText"] = "";
        table1.Rows.Add(row2);
        num1++;
       }
       return table1;
      }

  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/anan/p/548233.html
Copyright © 2011-2022 走看看