2009-03-01 14 views

risposta

310

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' 
+5

Che cos'è "NomeSuSmama"? – Drewdin

+11

'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

+2

Non dimenticarti del comando USE DatabaseName altrimenti puoi cercare in master o database diverso da quello desiderato – Muflix

28

Qualcosa di simile?

sp_columns @table_name=your table name 
11

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 
+1

Mi piace molto questo. Trovo ridondante la colonna 'Objtype', però :) – Joel

+1

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

+1

@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

1

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 
+0

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

1
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 
+2

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 –

84

questo è il modo più semplice

exec sp_columns [tablename] 
+0

Questa è breve e semplice, dovrebbe essere la risposta corretta. Immagino che non esistesse quando la domanda è stata inizialmente posta :) – DanteTheSmith

2

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.

+3

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

+1

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

4

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%' 
8

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 
-3
set fmtonly on 
select * from yourTable 
0

mi basta usare una query come Martin Smith accennato, solo po 'più corto:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' 
4

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

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

USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'

0
SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'TableName' 
0

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.

1

È 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"; } } 

} 
3

provare questo

select * from <tablename> where 1=2 

................................... ............

0
DECLARE @col NVARCHAR(MAX); 
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations'; 
SELECT @col; 
Problemi correlati