我想描述 SQL Server 2008 中的一个表,就像我们可以DESC
在 Oracle 中使用该命令一样。
我有[EX].[dbo].[EMP_MAST]
我想描述的表,但它不起作用。
显示错误:
对象“EMP_MAST”在数据库“master”中不存在或对该操作无效。
我想描述 SQL Server 2008 中的一个表,就像我们可以DESC
在 Oracle 中使用该命令一样。
我有[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_help 内置过程是 SQL Server 最接近 Oracle 的 DESC 函数恕我直言
sp_help MyTable
采用
sp_help "[SchemaName].[TableName]"
或者
sp_help "[InstanceName].[SchemaName].[TableName]"
如果您需要进一步限定表名
这可能会有所帮助:
Use MyTest
Go
select * from information_schema.COLUMNS where TABLE_NAME='employee'
{ where: MyTest= DatabaseName Employee= TableName } --可选条件
我喜欢尝试进行翻译的答案,但是,在使用代码时它不喜欢不是 VARCHAR 类型的列,例如 BIGINT 或 DATETIME。我今天需要类似的东西,所以我花时间根据自己的喜好对其进行修改。它现在也被封装在一个函数中,这是我能找到的最接近于在 oracle 处理它时键入描述的东西。我的案例陈述中可能仍然缺少一些数据类型,但这适用于我尝试过的所有内容。它还按序号位置排序。这也可以扩展为轻松包含主键列。
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 数据类型
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 NO decimal(10, 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'
显着变化:
只需输入以下行。
exec sp_help [table_name]