Vorrei interrogare il nome di tutte le colonne di una tabella. Ho trovato come farlo in:
Ma devo sapere: come si può fare in Microsoft SQL Server (2008 nel mio caso)?
SELECT TOP 0 * FROM my_table
sono meno sequenze di tasti
Vorrei interrogare il nome di tutte le colonne di una tabella. Ho trovato come farlo in:
Ma devo sapere: come si può fare in Microsoft SQL Server (2008 nel mio caso)?
SELECT TOP 0 * FROM my_table
sono meno sequenze di tasti
Risposte:
È possibile ottenere queste informazioni e molto altro ancora eseguendo una query sulle viste dello Schema informazioni .
Questa query di esempio:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
Può essere creato su tutti questi oggetti DB:
Nortwind.
...)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';
questo funziona per me
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'
poiché sono su localhost e ho più tabelle con lo stesso nome ma in database diversi.
È possibile utilizzare la stored procedure sp_columns che restituirebbe informazioni relative a tutte le colonne per una determinata tabella. Ulteriori informazioni sono disponibili qui http://msdn.microsoft.com/en-us/library/ms176077.aspx
Puoi anche farlo con una query SQL. Qualcosa del genere dovrebbe aiutare:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
O una variazione sarebbe:
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
Questo ottiene tutte le colonne da tutte le tabelle, ordinate per nome della tabella e quindi per nome della colonna.
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Questo è meglio che ottenere sys.columns
perché mostra DATA_TYPE
direttamente.
AND TABLE_SCHEMA = 'schemaName'
la WHERE
clausola.
JOIN sys.types t on c.system_type_id = t.system_type_id
e aggiungere t.name
l'istruzione 'SELECT' per ottenere anche i tipi accanto al nome di ogni colonna.
È possibile utilizzare sp_help
in SQL Server 2008.
sp_help <table_name>;
Scorciatoia da tastiera per il comando precedente: selezionare il nome della tabella (ovvero evidenziarlo) e premere ALT+ F1.
Puoi scrivere questa query per ottenere il nome della colonna e tutti i dettagli senza utilizzare INFORMATION_SCHEMA in 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 eseguire questo comando
EXEC sp_columns 'Your Table Name'
A questa domanda SO manca il seguente approccio:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
Verificherà se la data table
è la tabella di 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'
Puoi provare questo. Ciò fornisce tutti i nomi di colonna con i rispettivi tipi di dati.
desc <TABLE NAME> ;
puoi usare questa query
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
Un'altra opzione che è probabilmente più intuitiva è:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
Questo ti dà tutti i nomi delle colonne in una singola colonna. Se vi preoccupate per altri metadati, è possibile modificare modificare l'istruzione SELECT per SELECT *
.
Riassumendo le risposte
Vedo molte risposte e modi diversi per farlo, ma c'è il problema in questo e quello è il objective
.
Sì, l'obiettivo. Se vuoi only know
i nomi delle colonne puoi usare
SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table
Ma se vuoi use
quelle colonne da qualche parte o semplicemente dirle manipulate
, le domande rapide sopra non saranno di alcuna utilità. Devi usare
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'
un altro modo per conoscere alcune colonne specifiche in cui abbiamo bisogno di alcune colonne simili
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