一.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;
}