tutte - sql select tutti i campi
Come posso ottenere i nomi delle colonne da una tabella in SQL Server? (12)
Vorrei interrogare il nome di tutte le colonne di una tabella. Ho trovato come farlo in:
- Oracle
- MySQL
- PostgreSQL
Ma ho bisogno di sapere: come può essere fatto in Microsoft SQL Server (2008 nel mio caso)?
È possibile ottenere queste informazioni e molto, molto di più interrogando le visualizzazioni dello schema di informazioni .
Questa query di esempio:
SELECT *
FROM Northwind.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
Può essere creato su tutti questi oggetti DB:
- CHECK_CONSTRAINTS
- COLUMN_DOMAIN_USAGE
- COLUMN_PRIVILEGES
- COLUMNS
- CONSTRAINT_COLUMN_USAGE
- CONSTRAINT_TABLE_USAGE
- DOMAIN_CONSTRAINTS
- DOMAINS
- KEY_COLUMN_USAGE
- PARAMETERS
- REFERENTIAL_CONSTRAINTS
- ROUTINES
- ROUTINE_COLUMNS
- SCHEMATA
- TABLE_CONSTRAINTS
- TABLE_PRIVILEGES
- TABLES
- VIEW_COLUMN_USAGE
- VIEW_TABLE_USAGE
- VIEWS
È possibile 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;
È possibile utilizzare la stored procedure sp_columns che restituirebbe le informazioni relative a tutte le colonne per una determinata tabella. Maggiori informazioni possono essere trovate 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 potrebbe essere:
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
Ciò ottiene tutte le colonne da tutte le tabelle, ordinate in base al nome della tabella e quindi sul nome della colonna.
--Questa è un'altra variante utilizzata per documentare un database di grandi dimensioni per la conversione (Modificato su --remove colonne statiche)
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
- Nel join sinistro, c.type viene sostituito da c.xtype per ottenere i tipi varchar
Puoi provare questo.Questo fornisce tutti i nomi delle colonne con i loro rispettivi tipi di dati.
desc <TABLE NAME> ;
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')
Usando questa query si ottiene la risposta:
select Column_name
from Information_schema.columns
where Table_name like 'table name'
Verificherà se il dato la table
è Tabella 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'
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'
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('TABLE_NAME')
// TABLE_NAME è la tua tabella
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Questo è meglio che ottenere da sys.columns
perché mostra direttamente DATA_TYPE
.