Как описать таблицу в SQL Server 2008?

Я хочу описать таблицу в SQL Server 2008, как то, что мы можем сделать с помощью команды DESC в Oracle.

У меня есть таблица [EX].[dbo].[EMP_MAST], которую я хочу описать, но она не работает.

Показанная ошибка:

Объект "EMP_MAST" не существует в "master" базы данных или недействителен для этой операции.

Ответ 1

В соответствии с этой документацией:

DESC MY_TABLE

эквивалентно

SELECT имя_столбца "Имя", значение NULL "null", concat (concat (concat (data_type, '('), data_length), ')') "Тип" 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'

Ответ 2

Вы можете использовать sp_columns, хранимую процедуру для описания таблицы.

exec sp_columns TableName

Вы также можете использовать sp_help.

Ответ 3

Встроенная процедура sp_help - это самая близкая вещь SQL Server для функции Oracle DESC IMHO

sp_help MyTable

Используйте

sp_help "[SchemaName].[TableName]" 

или

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

если вам нужно дополнительно присвоить имя таблицы

Ответ 4

Может быть, это может помочь:

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

{где: MyTest = имя_базы      Employee = TableName} - Исключительные условия

Ответ 5

Мне нравится ответ, который пытается выполнить перевод, однако при использовании кода ему не нравятся столбцы, которые не являются типами VARCHAR, такими как BIGINT или DATETIME. Мне сегодня было что-то похожее, поэтому я потратил время, чтобы изменить его по своему вкусу. Он также теперь инкапсулирован в функцию, которая является самой близкой вещью, которую я мог бы найти, просто набрав описание, поскольку оракул обрабатывает ее. Я могу по-прежнему пропускать несколько типов данных в моем случае, но это работает на все, что я пробовал. Он также упорядочивает по порядку. это может быть расширено, чтобы также включать столбцы первичного ключа.

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')

Он возвращает следующие

Имя столбца 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 NO decimal (10, 2)

надеюсь, что это поможет кому-то.

Ответ 6

Вы можете использовать короткое сокращение клавиатуры для описания/подробной информации таблицы в SQL Server 2008.

Выполните шаги:

  • Введите имя таблицы,
  • Выберите его и нажмите Alt + F1
  • Он покажет подробную информацию/описание указанной таблицы как

    1) Дата создания таблицы,
    2) Описание столбцов,
    3) Идентичность,
    4) Индексы,
    5) Ограничения,
    6) Ссылки и т.д. Как показано ниже [пример]:

Alt + F1 Demo

Ответ 7

Как вариант ответа на мост (у меня еще нет комментариев, чтобы комментировать, и я не чувствовал себя хорошо в редактировании этого ответа), вот версия, которая работает лучше для меня.

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 для типа, потому что длина была пустой, и она уничтожила весь столбец Type. Поэтому не печатайте какой-либо компонент длины (или parens).
  • Измените проверку длины CAST от -1 до , проверьте фактическую длину. Я получал синтаксическую ошибку, потому что случай привел к "*", а не к -1. Кажется, имеет смысл делать арифметическую проверку, а не переполнение из CAST.
  • Не печатать длину, когда очень длинный (произвольно > 5 цифр).

Ответ 8

Просто введите нижнюю строку.

exec sp_help [table_name]