SQL Server 2000 元数据应用(四):获得数据库中表的所有字段http://www.cnblogs.com/ClarkChan/archive/2006/11/01/546319.html
2007-10-31 09:17
846 查看
SELECT
[Name] = clmns.[name],
[DataType] = usrt.[name],
[SystemType] = ISNULL(baset.[name], N''),
[Length] = CAST(CASE WHEN baset.[name] IN (N'char', N'varchar', N'binary', N'varbinary', N'nchar', N'nvarchar') THEN clmns.prec ELSE clmns.length END AS INT),
[NumericPrecision] = CAST(clmns.[xprec] AS TINYINT),
[NumericScale] = CAST(clmns.[xscale] AS INT),
[Nullable] = CASE CAST(clmns.[isnullable] AS BIT) WHEN 1 THEN 'YES' ELSE 'NO' END,
[DefaultValue] = defaults.[text],
[Identity] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsIdentity') AS INT),
[IsRowGuid] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsRowGuidCol') AS INT),
[IsComputed] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsComputed') AS INT),
[IsDeterministic] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsDeterministic') AS INT),
[IdentitySeed] = CAST(CASE COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsIdentity') WHEN 1 THEN IDENT_SEED(QUOTENAME(stbl.[name]) + '.' + QUOTENAME(tbl.[name])) ELSE 0 END AS NVARCHAR(40)),
[IdentityIncrement] = CAST(CASE COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsIdentity') WHEN 1 THEN IDENT_INCR(QUOTENAME(stbl.[name]) + '.' + QUOTENAME(tbl.[name])) ELSE 0 END AS NVARCHAR(40)),
[ComputedDefinition] = (SELECT [text] FROM dbo.syscomments WHERE [id] = clmns.[id] AND [number] IN (SELECT [colid] FROM dbo.syscolumns WHERE [id] = clmns.[id] AND [name] = clmns.[name] )),
[Collation] = clmns.[collation],
[ConstraintName] = constraints.[ConstraintName],
[ConstraintDef] = constraints.[ConstraintDef],
[ConstraintType] = constraints.[ConstraintType]
FROM
dbo.sysobjects AS tbl
INNER JOIN dbo.sysusers AS stbl ON stbl.[uid] = tbl.[uid]
INNER JOIN dbo.syscolumns AS clmns ON clmns.[id]=tbl.[id]
LEFT OUTER JOIN dbo.systypes AS usrt ON usrt.[xusertype] = clmns.[xusertype]
LEFT OUTER JOIN dbo.sysusers AS sclmns ON sclmns.[uid] = usrt.[uid]
LEFT OUTER JOIN dbo.systypes AS baset ON baset.xusertype = clmns.[xtype] and baset.[xusertype] = baset.[xtype]
LEFT OUTER JOIN dbo.syscomments AS defaults ON defaults.[id] = clmns.[cdefault]
LEFT OUTER JOIN (
SELECT
[ConstraintName] = object_name(const.[constid]),
[ConstraintDef] = CASE WHEN idx.[name] IS NOT NULL THEN idx.[name] ELSE com.[text] END,
[ColumnName] = col.[name],
[ConstraintType] = CASE WHEN idx.[name] IS NOT NULL THEN 'INDEX' WHEN const.[status] & 5 = 5 THEN 'DEFAULT' ELSE 'CHECK' END
FROM
dbo.sysconstraints const
LEFT JOIN dbo.syscomments com ON com.[id] = const.[constid]
LEFT JOIN dbo.syscolumns col ON col.[id] = OBJECT_ID('dbo.Demo') AND col.[colid] = const.[colid]
LEFT JOIN dbo.sysindexes idx ON idx.[id] = OBJECT_ID('dbo.Demo') AND idx.[name] = object_name(const.[constid])
WHERE
const.[id] = OBJECT_ID('dbo.Demo')
AND const.[status] & 7 IN ( 4,5,2 )
) AS constraints (ConstraintName, ConstraintDef, ColumnName, ConstraintType) ON constraints.[ColumnName] = clmns.[name]
WHERE
((tbl.[type] = 'U' OR tbl.[type] = 'S'))
AND (stbl.[name] = N'dbo'
AND tbl.[name] = N'Demo')
ORDER BY
CAST(clmns.[colid] AS INT) ASC
[Name] = clmns.[name],
[DataType] = usrt.[name],
[SystemType] = ISNULL(baset.[name], N''),
[Length] = CAST(CASE WHEN baset.[name] IN (N'char', N'varchar', N'binary', N'varbinary', N'nchar', N'nvarchar') THEN clmns.prec ELSE clmns.length END AS INT),
[NumericPrecision] = CAST(clmns.[xprec] AS TINYINT),
[NumericScale] = CAST(clmns.[xscale] AS INT),
[Nullable] = CASE CAST(clmns.[isnullable] AS BIT) WHEN 1 THEN 'YES' ELSE 'NO' END,
[DefaultValue] = defaults.[text],
[Identity] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsIdentity') AS INT),
[IsRowGuid] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsRowGuidCol') AS INT),
[IsComputed] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsComputed') AS INT),
[IsDeterministic] = CAST(COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsDeterministic') AS INT),
[IdentitySeed] = CAST(CASE COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsIdentity') WHEN 1 THEN IDENT_SEED(QUOTENAME(stbl.[name]) + '.' + QUOTENAME(tbl.[name])) ELSE 0 END AS NVARCHAR(40)),
[IdentityIncrement] = CAST(CASE COLUMNPROPERTY(clmns.[id], clmns.[name], N'IsIdentity') WHEN 1 THEN IDENT_INCR(QUOTENAME(stbl.[name]) + '.' + QUOTENAME(tbl.[name])) ELSE 0 END AS NVARCHAR(40)),
[ComputedDefinition] = (SELECT [text] FROM dbo.syscomments WHERE [id] = clmns.[id] AND [number] IN (SELECT [colid] FROM dbo.syscolumns WHERE [id] = clmns.[id] AND [name] = clmns.[name] )),
[Collation] = clmns.[collation],
[ConstraintName] = constraints.[ConstraintName],
[ConstraintDef] = constraints.[ConstraintDef],
[ConstraintType] = constraints.[ConstraintType]
FROM
dbo.sysobjects AS tbl
INNER JOIN dbo.sysusers AS stbl ON stbl.[uid] = tbl.[uid]
INNER JOIN dbo.syscolumns AS clmns ON clmns.[id]=tbl.[id]
LEFT OUTER JOIN dbo.systypes AS usrt ON usrt.[xusertype] = clmns.[xusertype]
LEFT OUTER JOIN dbo.sysusers AS sclmns ON sclmns.[uid] = usrt.[uid]
LEFT OUTER JOIN dbo.systypes AS baset ON baset.xusertype = clmns.[xtype] and baset.[xusertype] = baset.[xtype]
LEFT OUTER JOIN dbo.syscomments AS defaults ON defaults.[id] = clmns.[cdefault]
LEFT OUTER JOIN (
SELECT
[ConstraintName] = object_name(const.[constid]),
[ConstraintDef] = CASE WHEN idx.[name] IS NOT NULL THEN idx.[name] ELSE com.[text] END,
[ColumnName] = col.[name],
[ConstraintType] = CASE WHEN idx.[name] IS NOT NULL THEN 'INDEX' WHEN const.[status] & 5 = 5 THEN 'DEFAULT' ELSE 'CHECK' END
FROM
dbo.sysconstraints const
LEFT JOIN dbo.syscomments com ON com.[id] = const.[constid]
LEFT JOIN dbo.syscolumns col ON col.[id] = OBJECT_ID('dbo.Demo') AND col.[colid] = const.[colid]
LEFT JOIN dbo.sysindexes idx ON idx.[id] = OBJECT_ID('dbo.Demo') AND idx.[name] = object_name(const.[constid])
WHERE
const.[id] = OBJECT_ID('dbo.Demo')
AND const.[status] & 7 IN ( 4,5,2 )
) AS constraints (ConstraintName, ConstraintDef, ColumnName, ConstraintType) ON constraints.[ColumnName] = clmns.[name]
WHERE
((tbl.[type] = 'U' OR tbl.[type] = 'S'))
AND (stbl.[name] = N'dbo'
AND tbl.[name] = N'Demo')
ORDER BY
CAST(clmns.[colid] AS INT) ASC
相关文章推荐
- SQL Server 2000 元数据应用(三):获得数据库中存储过程的参数和数据集字段http://www.cnblogs.com/ClarkChan/archive/2006/10/31/545131.html
- SQL Server 2000 元数据应用(一):获得数据库的用户表 http://www.cnblogs.com/ClarkChan/archive/2006/10/26/540933.html
- SQL Server 2000 元数据应用(二):获得数据库的用户视图 http://www.cnblogs.com/ClarkChan/archive/2006/10/27/541724.html
- SQL Server 2000 元数据应用(五):获得数据库中表的主键和外键http://www.cnblogs.com/ClarkChan/archive/2006/11/02/547743.html
- 实战 SQL Server 2008 数据库误删除数据的恢复 (转载至dudu http://www.cnblogs.com/dudu/archive/2011/10/15/sql_server_recover_deleted_records.html)
- SQL Server 2000 元数据应用(四):获得数据库中表的所有字段
- windows phone 7 中文天气预报应用--来源http://www.cnblogs.com/liulunet/archive/2011/08/17/2141696.html
- SqlServer Text类型字段超过8000字处理 http://www.cnblogs.com/birdshover/archive/2006/06/16/427303.html
- JDBC连接数据库(http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html)
- SQL Server性能计数器(转自:http://www.cnblogs.com/netflu/archive/2010/09/22/1832993.html)
- SQL Server 2008 正式版安装指南(附序列号)(转自:http://www.cnblogs.com/JemBai/archive/2008/09/03/1282597.html)
- SQL Server 触发器 转http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html
- 创建与删除SQL约束或字段约束。 -----http://www.cnblogs.com/hanguoji/archive/2006/11/17/563871.html
- 一些在JAVA中获得文件夹路径的方法http://www.cnblogs.com/lostyue/archive/2011/06/27/2091686.html
- 清除 SQL SERVER 2005 事务日志 -http://www.cnblogs.com/reonlyrun/archive/2007/07/20/825071.html
- 如果你的数据库文件只剩下数据文件没有日志文件时,如何附加 (摘自:http://www.cnblogs.com/yukaizhao/archive/2008/07/23/sp_attach_single_file_db.html)
- SQL Server 性能调优(cpu) http://www.cnblogs.com/Amaranthus/archive/2012/03/07/2383551.html
- (转)[Python]MySQLdb for Python使用指南/Python的数据库操作【http://www.cnblogs.com/czh-liyu/archive/2008/04/13/1151758.html】
- insert into 后获得自动插入的id(select @@identity)--http://www.cnblogs.com/ahuo/archive/2008/01/24/1051112.html
- STL所有算法简介 (转) http://www.cnblogs.com/yuehui/archive/2012/06/19/2554300.html