如何在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
详细信息。
按照步骤:
- 写表名,
- select它,然后按Alt + F1
-
它会显示详细的信息/描述提到的表格,
1)表创builddate,
2)栏目说明,
3)身份,
4)索引,
5)约束条件,
6)参考文献等如下所示[ 例子 ]:
作为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]