如何在SQL Server 2008中描述表?

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

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

显示的错误:

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

根据这个文件 :

DESC MY_TABLE

相当于

SELECT column_name“Name”,nullable“Null?”,concat(concat(concat(data_type,'('),data_length)')')“Type”FROM 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' 

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

 exec sp_columns TableName 

你也可以使用sp_help 。

sp_help内置过程是SQL Server距离Oracle的DESC函数IMHO最近的东西

 sp_help MyTable 

使用

 sp_help "[SchemaName].[TableName]" 

要么

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

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

可能是这样可以帮助:

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

{其中:MyTest = DatabaseName Employee = TableName} – 可选条件

我喜欢尝试翻译的答案,但是,在使用代码时,它不喜欢不是VARCHARtypes的列,如BIGINT或DATETIME。 我今天需要类似的东西,所以我花时间修改它更多我喜欢的。 它现在也被封装在一个函数中,这是我能find的最接近的东西,只要键入describe作为oracle处理它。 在我的case语句中,我仍然可能会缺less一些数据types,但是这对我尝试的所有内容都是有效的。 它也按顺序排列。 这可以扩展到包括主键列也很容易。

 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 

一旦你创build了这个函数,我使用了一个示例表

 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数据types


columna NO bigint(19)
columnb NO int(10)
专栏NO datetime()
columnd NO varchar(100)
柱头无字符(10)
columnf NO位()
列数字(10,2)
columnh NO十进制(10,2)

希望这可以帮助别人。

SQL Server 2008可以使用键盘快捷方式查看表/ SQL Server 2008详细信息。

按照步骤:

  1. 写表名,
  2. select它,然后按Alt + F1
  3. 它会显示详细的信息/描述提到的表格,

    1)表创builddate,
    2)栏目说明,
    3)身份,
    4)索引,
    5)约束条件,
    6)参考文献等如下所示[ 例子 ]:

Alt + F1演示

作为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' 

显着的变化:

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

只需input下面的行。

 exec sp_help [table_name]