Come posso ottenere i nomi delle colonne da una tabella in SQL Server?

Vorrei interrogare il nome di tutte le colonne di una tabella. Ho trovato come farlo in:

  • Oracolo
  • MySQL
  • PostgreSQL

Ma ho bisogno di sapere: come può essere fatto in Microsoft SQL Server (2008 nel mio caso)?

È ansible 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
  • COLONNE
  • CONSTRAINT_COLUMN_USAGE
  • CONSTRAINT_TABLE_USAGE
  • DOMAIN_CONSTRAINTS
  • DOMINI
  • KEY_COLUMN_USAGE
  • PARAMETRI
  • REFERENTIAL_CONSTRAINTS
  • ROUTINE
  • ROUTINE_COLUMNS
  • schemi
  • TABLE_CONSTRAINTS
  • TABLE_PRIVILEGES
  • TABELLE
  • VIEW_COLUMN_USAGE
  • VIEW_TABLE_USAGE
  • VISUALIZZAZIONI

È ansible 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.

 select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tableName' 

Questo è meglio che ottenere da sys.columns perché mostra direttamente DATA_TYPE .

È ansible utilizzare sp_help in SQL Server 2008.

 sp_help ; 

Scorciatoia da tastiera per il comando precedente: selezionare il nome della tabella (es. Evidenziarlo) e premere ALT + F1 .

Usando questa query si ottiene la risposta:

 select Column_name from Information_schema.columns where Table_name like 'table name' 

È ansible 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; 

–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

 SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('TABLE_NAME') 

// TABLE_NAME è la tua tabella

 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 

Puoi provare questo.Questo fornisce tutti i nomi delle colonne con i loro rispettivi tipi di dati.

 desc  ;

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

Basta eseguire questo comando

EXEC sp_columns ‘Your 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 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 

puoi usare questa query

 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'