Я хотел бы запросить имя всех столбцов таблицы. Я нашел, как это сделать в:
Но мне нужно знать: как это можно сделать в Microsoft SQL Server (2008 в моем случае)?
SELECT TOP 0 * FROM my_table
меньше нажатий клавиш
Я хотел бы запросить имя всех столбцов таблицы. Я нашел, как это сделать в:
Но мне нужно знать: как это можно сделать в Microsoft SQL Server (2008 в моем случае)?
SELECT TOP 0 * FROM my_table
меньше нажатий клавиш
Ответы:
Вы можете получить эту информацию и многое, многое другое, запросив представления информационной схемы .
Этот пример запроса:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
Можно сделать поверх всех этих объектов БД:
Nortwind.
...)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';
это работает для меня
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'
так как я на локальном хосте, и у меня есть несколько таблиц с одним и тем же именем, но в разных базах данных.
Вы можете использовать хранимую процедуру sp_columns, которая будет возвращать информацию, относящуюся ко всем столбцам для данной таблицы. Более подробную информацию можно найти здесь http://msdn.microsoft.com/en-us/library/ms176077.aspx
Вы также можете сделать это с помощью запроса SQL. Такая вещь должна помочь:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
Или вариант будет:
SELECT o.Name, c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
Это получает все столбцы из всех таблиц, упорядоченные по имени таблицы, а затем по имени столбца.
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Это лучше, чем получать, sys.columns
потому что это показывает DATA_TYPE
напрямую.
AND TABLE_SCHEMA = 'schemaName'
в WHERE
предложение.
JOIN sys.types t on c.system_type_id = t.system_type_id
и добавлять t.name
в свой оператор SELECT, чтобы получить типы рядом с именем каждого столбца.
Вы можете использовать sp_help
в SQL Server 2008.
sp_help <table_name>;
Сочетание клавиш для вышеуказанной команды: выберите имя таблицы (т.е. выделите его) и нажмите ALT+ F1.
Вы можете написать этот запрос, чтобы получить имя столбца и все детали без использования INFORMATION_SCHEMA в MySql:
SHOW COLUMNS FROM database_Name.table_name;
--This is another variation used to document a large database for conversion (Edited to --remove static columns)
SELECT o.Name as Table_Name
, c.Name as Field_Name
, t.Name as Data_Type
, t.length as Length_Size
, t.prec as Precision_
FROM syscolumns c
INNER JOIN sysobjects o ON o.id = c.id
LEFT JOIN systypes t on t.xtype = c.xtype
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
--In the left join, c.type is replaced by c.xtype to get varchar types
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position
Просто запустите эту команду
EXEC sp_columns 'Your Table Name'
В этом вопросе отсутствует следующий подход:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
Он проверит ли , учитывая table
это базовая таблица .
SELECT
T.TABLE_NAME AS 'TABLE NAME',
C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
WHERE T.TABLE_TYPE='BASE TABLE'
AND T.TABLE_NAME LIKE 'Your Table Name'
Вы можете попробовать это. Это дает все имена столбцов с соответствующими им типами данных.
desc <TABLE NAME> ;
Вы можете использовать этот запрос
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name
Еще один вариант, который, возможно, является более интуитивным:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
Это дает вам все ваши имена столбцов в одном столбце. Если вы заботитесь о других метаданных, вы можете изменить редактировать SELECT STATEMENT TO SELECT *
.
Обобщая ответы
Я вижу много разных ответов и способов сделать это, но есть проблема в этом, и это objective
.
Да, цель. Если вы хотите, чтобы only know
имена столбцов вы можете использовать
SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table
Но если вы хотите use
где-то эти столбцы или просто произносите manipulate
их, быстрые запросы, приведенные выше, не будут иметь никакого смысла. Вам нужно использовать
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'
еще один способ узнать некоторые конкретные столбцы, где мы нуждаемся в некоторых аналогичных столбцах
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'
SELECT * FROM my_table WHERE 1=0