Gostaria de consultar o nome de todas as colunas de uma tabela. Eu descobri como fazer isso em:
Mas preciso saber: como isso pode ser feito no Microsoft SQL Server (2008 no meu caso)?
SELECT TOP 0 * FROM my_table
é menos teclas digitadas
Gostaria de consultar o nome de todas as colunas de uma tabela. Eu descobri como fazer isso em:
Mas preciso saber: como isso pode ser feito no Microsoft SQL Server (2008 no meu caso)?
SELECT TOP 0 * FROM my_table
é menos teclas digitadas
Respostas:
Você pode obter essas informações e muito mais consultando as visualizações do esquema de informações .
Esta consulta de exemplo:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
Pode ser feito sobre todos esses objetos de banco de dados:
Nortwind.
...)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';
isso funciona para mim
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'
pois estou no host local e tenho várias tabelas com o mesmo nome, mas em bancos de dados diferentes.
Você pode usar o procedimento armazenado sp_columns, que retornaria informações pertencentes a todas as colunas para uma determinada tabela. Mais informações podem ser encontradas aqui http://msdn.microsoft.com/en-us/library/ms176077.aspx
Você também pode fazer isso através de uma consulta SQL. Algo assim deve ajudar:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
Ou uma variação seria:
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
Isso obtém todas as colunas de todas as tabelas, ordenadas pelo nome da tabela e depois no nome da coluna.
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Isso é melhor do que obter, sys.columns
porque mostra DATA_TYPE
diretamente.
AND TABLE_SCHEMA = 'schemaName'
a WHERE
cláusula
JOIN sys.types t on c.system_type_id = t.system_type_id
e adicionar t.name
sua instrução 'SELECT' para obter os tipos ao lado do nome de cada coluna também.
Você pode usar sp_help
no SQL Server 2008.
sp_help <table_name>;
Atalho do teclado para o comando acima: selecione o nome da tabela (ou seja, destaque-o) e pressione ALT+ F1.
Você pode escrever esta consulta para obter o nome da coluna e todos os detalhes sem usar o INFORMATION_SCHEMA no 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
Basta executar este comando
EXEC sp_columns 'Your Table Name'
Esta questão SO está faltando a seguinte abordagem:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
Ele irá verificar se o dado table
é a tabela base .
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'
Você pode tentar isso. Isso fornece todos os nomes de colunas com seus respectivos tipos de dados.
desc <TABLE NAME> ;
você pode usar esta consulta
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
Uma outra opção que é sem dúvida mais intuitiva é:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
Isso fornece todos os nomes de suas colunas em uma única coluna. Se você se preocupa com outros metadados, pode alterar a edição de SELECT STATEMENT TO SELECT *
.
Resumindo as respostas
Eu posso ver muitas respostas diferentes e maneiras de fazer isso, mas há um problema nisso e esse é o objective
.
Sim, o objetivo. Se você quiser only know
os nomes das colunas, poderá usar
SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table
Mas se você quiser use
essas colunas em algum lugar ou simplesmente dizê- manipulate
las, as consultas rápidas acima não serão úteis. Você precisa usar
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'
mais uma maneira de conhecer algumas colunas específicas nas quais precisamos de algumas colunas semelhantes
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