我想在SQL Server 2008中描述一个表,就像我们在Oracle中使用DESC
命令所做的那样。
我想要描述的表[EX].[dbo].[EMP_MAST]
,但它不起作用。
显示错误:
对象'EMP_MAST'在数据库'master'中不存在或者是 此操作无效。
答案 0 :(得分:78)
答案 1 :(得分:39)
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
中表格的说明/详细信息。
答案 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
希望这有助于某人。
答案 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'
值得注意的变化:
答案 7 :(得分:1)
只需输入以下行。
exec sp_help [table_name]