我有一个SQL Server数据库,我想知道它有什么列和类型。我更喜欢通过查询而不是使用像Enterprise Manager这样的GUI来实现这一点。有办法做到这一点吗?


当前回答

以防您不想使用stored proc,这里有一个简单的查询版本

select * 
  from information_schema.columns 
 where table_name = 'aspnet_Membership'
 order by ordinal_position

其他回答

下面的查询将提供类似于python、Pandas库中的info()函数的输出。

USE [Database_Name]

IF OBJECT_ID('tempdo.dob.#primary_key', 'U') IS NOT NULL DROP TABLE #primary_key

SELECT 
CONS_T.TABLE_CATALOG,
CONS_T.TABLE_SCHEMA,
CONS_T.TABLE_NAME,
CONS_C.COLUMN_NAME,
CONS_T.CONSTRAINT_TYPE,
CONS_T.CONSTRAINT_NAME
INTO  #primary_key
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS CONS_T 
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CONS_C ON CONS_C.CONSTRAINT_NAME= CONS_T.CONSTRAINT_NAME


SELECT
SMA.name AS [Schema Name],
ST.name AS [Table Name],
SC.column_id AS [Column Order],
SC.name AS [Column Name],
PKT.CONSTRAINT_TYPE, 
PKT.CONSTRAINT_NAME, 
SC.system_type_id,
STP.name AS [Data Type],
SC.max_length,
SC.precision, 
SC.scale, 
SC.is_nullable, 
SC.is_masked
FROM sys.tables  AS ST
JOIN sys.schemas AS SMA ON SMA.schema_id = ST.schema_id
JOIN sys.columns AS SC ON SC.object_id = ST.object_id 
JOIN sys.types AS STP ON STP.system_type_id = SC.system_type_id
LEFT JOIN #primary_key AS PKT ON PKT.TABLE_SCHEMA = SMA.name
                                 AND PKT.TABLE_NAME = ST.name
                                 AND PKT.COLUMN_NAME = SC.name
ORDER BY ST.name ASC, SMA.name ASC

有几个方法可以获取一个表的元数据:

EXEC sp_help tablename

将返回几个结果集,描述表、它的列和约束。

INFORMATION_SCHEMA视图将为您提供所需的信息,但不幸的是,您必须手动查询这些视图并连接它们。

首先连接到你的数据库,

使用DB_name

然后

exec sp_help '生产。Et_Issue”

这里的'production'是模式名。如果你没有图式, 您可以简单地写入sp_help table_name

除了上述问题,如果我们在DB中有像db_name.dbo这样的表。Table_name,我们可以使用以下步骤

连接DB 使用db_name; 使用EXEC sp_help,不要忘记将表名设置为'dbo。表名'如果你有dbo作为schema。 Exec sp_help 'dbo.table_name'

这应该有用!

如果你正在使用Brent Ozar团队的FirstResponderKit,你也可以运行这个查询:

exec sp_blitzindex @tablename='MyTable'

它将返回关于表的所有信息:

索引及其使用统计信息(读、写、锁等)、空间 二手和其他 缺失索引 列 外键 统计内容

当然,它不是一个系统,也不像sp_help或sp_columns那样通用,但它返回关于表的所有可能信息,我认为值得在您的环境中创建它并在这里提到它。