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


当前回答

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

exec sp_blitzindex @tablename='MyTable'

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

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

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

其他回答

您可以使用以下方法:sp_help表名

[示例]sp_help客户

或使用快捷键

选择所需的表并按ALT+F1。

示例:客户按“ALT+F1”。

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

EXEC sp_help tablename

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

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

SQL Server中与Oracle的describe命令等价的是存储的proc sp_help

describe命令提供了列名、类型、长度等信息。

在SQL Server中,假设你想在数据库'mydb'中的模式'myschema'中描述一个表'mytable',你可以这样做:

USE mydb;
exec sp_help 'myschema.mytable';

你可以使用sp_columns存储过程:

exec sp_columns MyTable
CREATE PROCEDURE [dbo].[describe] 
( 
@SearchStr nvarchar(max) 
) 
AS 
BEGIN 
SELECT  
    CONCAT([COLUMN_NAME],' ',[DATA_TYPE],' ',[CHARACTER_MAXIMUM_LENGTH],' ', 
    (SELECT CASE [IS_NULLABLE] WHEN 'NO' THEN 'NOT NULL' ELSE 'NULL' END),
    (SELECT CASE WHEN [COLUMN_DEFAULT] IS NULL THEN '' ELSE CONCAT(' DEFAULT ',[COLUMN_DEFAULT]) END)
    ) AS DESCRIPTION
    FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE @SearchStr
END