Come restituire i nomi delle colonne di una tabella utilizzando SQL Server 2008? ad esempio una tabella contiene queste colonne - ID, nome, indirizzo, paese e voglio restituirle come dati.Come si restituiscono i nomi delle colonne di una tabella?
risposta
Non sono sicuro se c'è un modo più semplice nella versione 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Qualcosa di simile?
sp_columns @table_name=your table name
Un metodo è quello di interrogare syscolumns:
select
syscolumns.name as [Column],
syscolumns.xusertype as [Type],
sysobjects.xtype as [Objtype]
from
sysobjects
inner join
syscolumns on sysobjects.id = syscolumns.id
where sysobjects.xtype = 'u'
and sysobjects.name = 'MyTableName'
order by syscolumns.name
Mi piace molto questo. Trovo ridondante la colonna 'Objtype', però :) – Joel
Non sarebbe meglio scrivere completamente il join (sysobjects così inner join syscolumns sc su so.id = sc.id)? Sembra una risposta pigra a scapito delle prestazioni. Potrei sbagliarmi ... – Losbear
@Losbear lo ha cambiato PS: non è pigro, è solo il codice di 8 anni fa. :) Nei vecchi tempi (ho usato SQL Server a partire dalla versione 4.2), scrivevo le query SQL in questo modo. nessun problema di prestazioni. – splattne
Non sono sicuro se il valore syscolumns.colid è lo stesso che il valore 'ORDINAL_POSITION' tornato come parte di sp_columns, ma in ciò che segue che lo sto usando in quel modo - spero di non essere disinformato ...
Ecco una leggera variazione su alcune delle altre risposte che ho trovato - lo uso perché la "posizione" o l'ordine della colonna in la tabella è importante nella mia applicazione - fondamentalmente ho bisogno di sapere 'Cos'è la colonna (n) chiamato?'
sp_columns restituisce un sacco di roba estranei, e sono più maneggevole con un selezionato di funzioni T-SQL, così sono andato questo percorso:
select
syscolumns.name,
syscolumns.colid
from
sysobjects, syscolumns
where
sysobjects.id = syscolumns.id and
sysobjects.xtype = 'u' and
sysobjects.name = '<YOUR_TABLE>'
order by syscolumns.colid
Ho usato questo metodo per un lungo periodo di tempo, ma è stato sconsigliato. In effetti ho trovato il problema esatto che mi è stato detto che potrei ... è più probabile che le nuove versioni di MSSQL cambieranno la sintassi. Ad esempio, era usato sys.object e sys.columns nelle versioni in cui ho usato per la prima volta questa tecnica. Presumibilmente i metodi dello schema e dello stored procedure sono una prova in più contro questo ... non sono sicuro, ma finora tutto bene. – RosieC
CREATE PROCEDURE [dbo].[Usp_GetColumnName]
@TableName varchar(50)
AS
BEGIN
BEGIN
SET NOCOUNT ON
IF (@TableName IS NOT NULL)
select ORDINAL_POSITION OrderPosition,COLUMN_NAME ColumnName from information_schema.columns
where table_name [email protected]
order by ORDINAL_POSITION
END
END
Benvenuti in SO!Ma sembra che questa domanda abbia già ottenuto una risposta soddisfacente circa tre anni fa ... Inoltre, quando pubblichi il codice, usa {} per evidenziarlo. Dai un'occhiata alle domande frequenti, contiene alcune informazioni utili su come iniziare qui: http://stackoverflow.com/faq –
questo è il modo più semplice
exec sp_columns [tablename]
Questa è breve e semplice, dovrebbe essere la risposta corretta. Immagino che non esistesse quando la domanda è stata inizialmente posta :) – DanteTheSmith
Perché non provare questo:
tasto destro del mouse sulla scheda le -> Tabella degli script come -> Crea per -> Nuovo editor di query Finestra?
L'intero elenco di colonne è indicato nello script. Copialo e usa i campi se necessario.
Probabilmente l'autore voleva sapere come ottenere i nomi delle colonne dalla tabella a livello di codice per l'uso in una stored procedure o in altri script. – KLee1
La risposta dice '" Voglio restituirli come dati "', mentre la tua risposta otterrà i valori, è probabile che l'OP desideri i dati in fase di runtime. – StuperUser
Io uso
SELECT st.NAME, sc.NAME, sc.system_type_id
FROM sys.tables st
INNER JOIN sys.columns sc ON st.object_id = sc.object_id
WHERE st.name LIKE '%Tablename%'
questo sembra un po 'più facile quindi i suggerimenti di cui sopra, perché utilizza la funzione OBJECT_ID() per individuare id della tabella. Qualsiasi colonna con quell'id è parte della tabella.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Io di solito uso una query simile per vedere se una colonna che conosco fa parte di una versione più recente è presente. È la stessa query con l'aggiunta di {AND name = 'YOUR_COLUMN'} alla clausola where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
set fmtonly on
select * from yourTable
mi basta usare una query come Martin Smith accennato, solo po 'più corto:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
Il seguente sembra essere come la prima query suggerito sopra, ma a volte è necessario specificare il database per farlo funzionare.Si noti che la query dovrebbe funzionare anche senza specificare il TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Mentre la risposta di @Gulzar Nazim è grande, è probabilmente più facile da includere il nome del database nella query, che potrebbe essere raggiunto con il seguente SQL .
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Da SysColumns is deprecated, utilizzare Sys.All_Columns
:
Select
ObjectName = Object_Name(Object_ID)
,T.Name
,C.*
,T.*
From
Sys.All_Columns C
Inner Join Sys.Types T On T.User_Type_Id = C.User_Type_Id
Where [Object_ID] = Object_ID('Sys.Server_Permissions')
--Order By Name Asc
Select * From Sys.Types
produrrà user_type_id = ID
del tipo. Questo è unico nel database. Per i tipi di dati di sistema: user_type_id = system_type_id
.
È possibile utilizzare il codice seguente per stampare tutti i nomi di colonne; È inoltre possibile modificare il codice per stampare altri dettagli in qualsiasi formato u come
declare @Result varchar(max)='
'
select @[email protected]+''+ColumnName+'
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id('tblPracticeTestSections')
) t
order by ColumnId
print @Result
uscita
column1
column2
column3
column4
Per utilizzare lo stesso codice per stampare la tabella e il suo nome colonna come classe C# utilizzare il codice qui sotto:
declare @TableName sysname = '<EnterTableName>'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'
select @Result = @Result + '
public static string ' + ColumnName + ' { get { return "'+ColumnName+'"; } }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @Result = @Result + '
}'
print @Result
uscita:
public class tblPracticeTestSections
{
public static string column1 { get { return "column1"; } }
public static string column2{ get { return "column2"; } }
public static string column3{ get { return "column3"; } }
public static string column4{ get { return "column4"; } }
}
provare questo
select * from <tablename> where 1=2
................................... ............
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
- 1. Ottieni i nomi delle colonne
- 2. LINQ: ottenere i nomi delle colonne della tabella
- 3. Creare una tabella con i nomi delle colonne derivate da valori di riga di un'altra tabella
- 4. Basta avere i nomi delle colonne dalla tabella alveare
- 5. come ottenere i nomi delle colonne delle chiavi primarie per una determinata tabella?
- 6. Hive - ottieni i nomi delle colonne
- 7. inserire dati nella tabella senza specificare i nomi delle colonne
- 8. mysql, scorrere i nomi delle colonne
- 9. come ottenere i nomi delle colonne di una tabella in accesso ms?
- 10. colonne Classifica e selezionando i nomi delle colonne
- 11. SQL nomi delle colonne Selezione come valori
- 12. Recupera i nomi delle colonne da java.sql.ResultSet
- 13. Come ottenere i nomi delle colonne da una tabella in sqlite tramite PRAGMA (.net/C#)?
- 14. Come si conta colonne di una tabella
- 15. data.frame senza rovinare i nomi delle colonne
- 16. Utilizzo di GetSchemaTable() per recuperare solo i nomi delle colonne
- 17. JPA: come ignorare i nomi delle colonne di attributi @Embedded
- 18. Come ottenere i nomi delle colonne della tabella in fase di esecuzione in C#?
- 19. SQL: Vista dinamica con i nomi delle colonne in base ai valori delle colonne nella tabella di origine
- 20. selezionare in una tabella con nomi di colonne diversi
- 21. Ottenere SqlBulkCopy per onorare i nomi delle colonne
- 22. Come posso impedire a Coldfusion di convertire i nomi delle colonne delle query in maiuscolo?
- 23. Ottenere i nomi delle colonne con BCP queryout
- 24. Come posso rbindare i vettori corrispondenti ai nomi delle colonne?
- 25. L'aggiunta di un prefisso per i nomi delle colonne
- 26. Come visualizzare tutti i metadati delle colonne di una tabella nel database Oracle?
- 27. Dictreader Python - Come rendere minuscoli i nomi delle colonne CSV?
- 28. Pivot duplicare i nomi delle colonne e ottenere tutti i valori per le colonne
- 29. in R, personalizzare i nomi delle colonne create da dcast.data.table
- 30. in base ai nomi delle colonne
Che cos'è "NomeSuSmama"? – Drewdin
'YourSchemaName' è lo schema per la tabella su cui si sta eseguendo una query. Esempio: dbo.myTable, 'dbo' è lo schema a cui appartiene 'myTable'. Gli schemi semplificano l'assegnazione delle autorizzazioni a un raggruppamento anziché a ciascuna tabella singolarmente. Vedi anche questa domanda: http://stackoverflow.com/questions/1062075/why-do-names-nome-in-sql-server-start-with-dbo – jmosesman
Non dimenticarti del comando USE DatabaseName altrimenti puoi cercare in master o database diverso da quello desiderato – Muflix