如何在SQL Server 2008中描述表?

时间:2012-06-18 06:51:10

标签: sql sql-server-2008

我想在SQL Server 2008中描述一个表,就像我们在Oracle中使用DESC命令所做的那样。

我想要描述的表[EX].[dbo].[EMP_MAST],但它不起作用。

显示错误:

  

对象'EMP_MAST'在数据库'master'中不存在或者是   此操作无效。

8 个答案:

答案 0 :(得分:78)

您可以使用sp_columns,一个用于描述该表的存储过程。

exec sp_columns TableName

您也可以使用sp_help

答案 1 :(得分:39)

根据this documentation

  

DESC MY_TABLE

     

相当于

     

SELECT column_name" Name",nullable" Null?",   concat(concat(data_type,'('),data_length),')')" Type"从   user_tab_columns WHERE table_name =' TABLE_NAME_TO_DESCRIBE';

我已经粗略地将其转换为SQL Server等效的内容 - 只需确保您在EX数据库上运行它。

SELECT column_name AS [name],
       IS_NULLABLE AS [null?],
       DATA_TYPE + COALESCE('(' + CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1
                                  THEN 'Max'
                                  ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5))
                                  END + ')', '') AS [type]
FROM   INFORMATION_SCHEMA.Columns
WHERE  table_name = 'EMP_MAST'

答案 2 :(得分:28)

sp_help内置过程是SQL Server最接近Oracle的DESC函数恕我直言

sp_help MyTable

使用

sp_help "[SchemaName].[TableName]" 

sp_help "[InstanceName].[SchemaName].[TableName]"

如果您需要进一步限定表名

答案 3 :(得分:7)

可能会有所帮助:

Use MyTest
Go
select * from information_schema.COLUMNS where TABLE_NAME='employee'

{where:MyTest = DatabaseName        Employee = TableName} - 可选条件

答案 4 :(得分:7)

您可以使用键盘快捷方式获取SQL Server 2008中表格的说明/详细信息。

按照步骤:

  1. 写表名称,
  2. 选择它,然后按 Alt + F1
  3. 它将显示上述表格的详细信息/描述,

    1)表创建日期,
    2)列说明,
    3)身份,
    4)索引,
    5)约束,
    6)参考文献等。如下所示[示例]:

  4. Alt+F1 Demo

答案 5 :(得分:6)

我喜欢尝试进行翻译的答案,但是,在使用代码时,它不喜欢非VARCHAR类型的列,例如BIGINT或DATETIME。我今天需要类似的东西所以我花时间根据自己的喜好修改它。它现在也被封装在一个函数中,这是我能找到的最接近的东西,只需输入describe就像oracle一样处理它。我可能仍然在我的case语句中缺少一些数据类型,但这适用于我尝试过的所有内容。它也按顺序排列。这可以扩展到容易包括主键列。

CREATE FUNCTION dbo.describe (@TABLENAME varchar(50))
returns table
as
RETURN
(
SELECT TOP 1000 column_name AS [ColumnName],
       IS_NULLABLE AS [IsNullable],
       DATA_TYPE + '(' + CASE 
                                    WHEN DATA_TYPE = 'varchar' or DATA_TYPE = 'char' THEN 
                                      CASE 
                                        WHEN Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) = -1 THEN 'Max'
                                        ELSE Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5))
                                      END
                                    WHEN DATA_TYPE = 'decimal' or DATA_TYPE = 'numeric' THEN
                                      Cast(NUMERIC_PRECISION AS VARCHAR(5))+', '+Cast(NUMERIC_SCALE AS VARCHAR(5))
                                    WHEN DATA_TYPE = 'bigint' or DATA_TYPE = 'int' THEN
                                      Cast(NUMERIC_PRECISION AS VARCHAR(5))
                                    ELSE ''
                                  END + ')' AS [DataType]
FROM   INFORMATION_SCHEMA.Columns
WHERE  table_name = @TABLENAME
order by ordinal_Position
);
GO

在这里创建函数后,我使用了一个示例表

create table dbo.yourtable
(columna bigint,
 columnb int,
 columnc datetime,
 columnd varchar(100),
 columne char(10),
 columnf bit,
 columng numeric(10,2),
 columnh decimal(10,2)
 )

然后你可以按如下方式执行它

select * from describe ('yourtable')

返回以下内容

ColumnName IsNullable DataType


columna NO bigint(19)
columnb NO int(10)
columnc NO datetime()
columnd NO varchar(100)
columne NO char(10)
columnf NO bit()
columng NO numeric(10,2)
columnh无小数(10,2)

希望这有助于某人。

答案 6 :(得分:2)

作为Bridge答案的一个变体(我还没有足够的回复评论,并且对编辑该答案感觉不对),这个版本对我来说效果更好。

SELECT column_name AS [Name],
   IS_NULLABLE AS [Null?],
   DATA_TYPE + CASE
                 WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN ''
                 WHEN CHARACTER_MAXIMUM_LENGTH > 99999 THEN ''
                 ELSE '(' + Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) + ')' 
               END AS [Type]
FROM   INFORMATION_SCHEMA.Columns
WHERE  table_name = 'table_name'

值得注意的变化:

  • 适用于类型无长度。对于int列,我看到类型为NULL,因为长度为null并且它消灭了整个Type列。所以不要打印任何长度的组件(或parens)。
  • CAST 长度为-1的检查更改为检查实际长度。我收到语法错误,因为案例导致'*'而不是-1。似乎更有意义来执行算术检查而不是来自CAST的溢出。
  • 长时间不打印长度(任意> 5位数)。

答案 7 :(得分:1)

只需输入以下行。

exec sp_help [table_name]