SQL Server获取表的元数据

最近客户需要数据库中表的数据字典,也就是需要表名、列名、列的数据类型及长度等信息。

通过下面的sql,可以抓取到表的这些基本信息,注意 不包含视图的信息:

SELECT 
	D.NAME AS TABLE_NAME,
	A.column_id ,
	A.NAME AS COLUMN_NAME,
	CASE WHEN A.IS_IDENTITY=1 THEN '√ ' ELSE '' END AS IS_IDENTITY,
	isnull(CASE WHEN x.is_primary_key=1 and x.type_desc='CLUSTERED' and x.is_unique=1 THEN '主键/聚集/唯一'
	WHEN x.is_primary_key=1 and x.is_unique=1 THEN '主键/唯一'
	WHEN x.type_desc='CLUSTERED' and x.is_unique=1 THEN '聚集/唯一'
	WHEN x.type_desc='CLUSTERED' THEN '聚集'
	WHEN x.is_unique=1 THEN '唯一'
	END + convert(varchar,y.index_id)+'_'+convert(varchar,y.key_ordinal),'') +ISNULL('[外键:'+h.foreignkey+']','') AS PK_FK_INDEX,
	B.NAME+
	case when A.user_type_id in(165,167,173,175,231,239) 
		then '('+(case when A.max_length=-1 then 'max' else convert(varchar,COLUMNPROPERTY(A.object_id,A.NAME,'PRECISION')) end)+')' 
		when A.user_type_id in(106,108) 
		then '('+convert(varchar,A.precision)+','+convert(varchar,A.scale)+')'
	else '' end AS COLUMN_TYPE,

	CASE WHEN A.IS_NULLABLE=1 THEN '√ 'ELSE '' END AS IS_NULL
	--ISNULL(E.definition,'') AS DEFAULT_VALUE,
	--ISNULL(G.[VALUE],'') AS COLUMN_MEAN
FROM SYS.COLUMNS A
LEFT JOIN SYS.TYPES B 
       ON A.system_type_id=B.system_type_id AND A.user_type_id=B.user_type_id
INNER JOIN SYS.TABLES D 
        ON A.object_id=D.object_id-- AND D.TYPE='U' --AND D.NAME<>'DTPROPERTIES'
LEFT JOIN sys.default_constraints E 
       ON A.default_object_id=E.object_id
LEFT JOIN sys.extended_properties G 
       ON A.object_id=G.major_id AND A.column_id=G.minor_id   
LEFT JOIN sys.extended_properties F 
       ON D.object_id=F.major_id AND F.minor_id=0
LEFT JOIN (SYS.INDEXES x join sys.index_columns y on x.index_id=y.index_id and x.object_id=y.object_id )
	on x.object_id=A.object_id and y.column_id=A.column_id and (x.is_primary_key=1 or x.type_desc='CLUSTERED' or x.is_unique=1)
OUTER APPLY(
	select object_name(O.object_id)+'('+O.name+')' as foreignkey 
	FROM SYS.COLUMNS O
	inner JOIN sys.foreign_key_columns P 
	   ON O.object_id=P.referenced_object_id and P.referenced_column_id=O.column_id
	where P.parent_object_id=A.object_id and P.parent_column_id=A.column_id
)H
where D.is_ms_shipped=0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDBC(Java数据库连接)是一种用于在Java程序中与数据库进行交互的API。要获取SQL Server注释,我们可以使用以下方法: 1. 连接到SQL Server数据库:首先,我们需要通过JDBC连接到SQL Server数据库。我们可以使用JDBC驱动程序提供的连接字符串、用户名和密码来建立连接。 2. 获取注释的元数据:一旦连接到数据库,我们可以使用Java的DatabaseMetaData类来获取元数据信息。通过调用DatabaseMetaData.getTables方法,我们可以获取所有的信息。 3. 获取注释:通过遍历的ResultSet,我们可以获得每个的信息。使用DatabaseMetaData.getColumns方法来获取每个的列信息,并使用ResultSetMetaData.getColumnLabel方法获得每个列的标签。 4. 解析注释:注释通常存储在的“备注”字段中。可以使用ResultSet.getMetaData方法获取每个的备注信息。 5. 显示注释:将注释打印或显示给用户。 以下是一个使用JDBC API获取SQL Server注释的简单示例代码: ```java import java.sql.*; public class GetTableComments { public static void main(String[] args) { String url = "jdbc:sqlserver://localhost;databaseName=YourDatabaseName;"; String username = "YourUsername"; String password = "YourPassword"; try (Connection conn = DriverManager.getConnection(url, username, password)) { DatabaseMetaData metaData = conn.getMetaData(); String catalog = null; String schemaPattern = null; String tableNamePattern = "%"; String[] types = {"TABLE"}; ResultSet tables = metaData.getTables(catalog, schemaPattern, tableNamePattern, types); while (tables.next()) { String tableName = tables.getString("TABLE_NAME"); String tableComment = tables.getString("REMARKS"); System.out.println("Table Name: " + tableName); System.out.println("Table Comment: " + tableComment); } tables.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 请注意,以上代码仅是一个简单的示例,可能需要根据实际情况进行修改和适配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值