Odpowiedzi:
Nie jestem pewien, czy jest łatwiejszy sposób w wersji 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
To jest najłatwiejszy sposób
exec sp_columns [tablename]
Coś takiego?
sp_columns @table_name=your table name
Jedną z metod jest zapytanie kwerend systemowych:
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
Objtype
kolumna jest zbędna :)
Wydaje się to nieco łatwiejsze niż powyższe sugestie, ponieważ używa funkcji OBJECT_ID () do zlokalizowania identyfikatora tabeli. Każda kolumna o tym identyfikatorze jest częścią tabeli.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Często używam podobnego zapytania, aby sprawdzić, czy kolumna, którą znam, jest częścią nowszej wersji, jest obecna. Jest to to samo zapytanie z dodatkiem {AND name = 'YOUR_COLUMN'} do klauzuli where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
Spróbuj tego
select * from <tablename> where 1=2
...............................................
WHERE 1=2
i nadal zwróci metadane z kolumny. Jeśli używasz interfejsu programistycznego, takiego jak ODBC, to informacje o kolumnie są dostępne jako lista / tablica z obiektu kursora w programie, czego szukałem. Może to nie mieć sensu w czystym kontekście SQL, ale jest zwięzłym podejściem podczas łączenia się z bazą danych przez Python / Java / C / itp.
Poniższe wydaje się być jak pierwsze sugerowane zapytanie powyżej, ale czasami musisz określić bazę danych, aby działała. Pamiętaj, że zapytanie powinno również działać bez określania TABELI_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Dlaczego nie spróbować tego:
kliknij prawym przyciskiem myszy tabelę -> Tabela skryptów jako -> Utwórz w -> Okno nowego edytora zapytań?
Cała lista kolumn jest podana w skrypcie. Skopiuj go i użyj pól w razie potrzeby.
"I want to return these as data"
, podczas gdy twoja odpowiedź otrzyma wartości, prawdopodobnie OP chce danych w czasie wykonywania.
USE[Database]
SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo'
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 =@TableName
order by ORDINAL_POSITION
END
END
Nie jestem pewien, czy wartość syscolumns.colid jest taka sama, jak wartość „ORDINAL_POSITION” zwracana jako część sp_columns, ale w dalszej części używam jej w ten sposób - mam nadzieję, że nie mylę ...
Oto niewielka odmiana niektórych innych odpowiedzi, które znalazłem - używam tego, ponieważ „pozycja” lub kolejność kolumny w tabeli jest ważna w mojej aplikacji - w zasadzie muszę wiedzieć, co nazywa się kolumna (n) ?
sp_columns zwraca całą masę obcych rzeczy, a ja jestem bardziej wygodny z funkcjami select niż T-SQL, więc wybrałem tę trasę:
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
Chociaż odpowiedź @Gulzara Nazima jest świetna, prawdopodobnie łatwiej jest dołączyć do zapytania nazwę bazy danych , co można uzyskać za pomocą następującego kodu SQL.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
Możesz użyć poniższego kodu, aby wydrukować wszystkie nazwy kolumn; Możesz także zmodyfikować kod, aby wydrukować inne szczegóły w dowolnym formacie
declare @Result varchar(max)='
'
select @Result=@Result+''+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
Wynik
column1
column2
column3
column4
Aby użyć tego samego kodu do wydrukowania tabeli i jej nazwy kolumny jako klasy C #, użyj poniższego kodu:
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
Wynik:
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"; } }
}
Używam tylko zapytania takiego jak wspomniany Martin Smith, tylko trochę krótszego:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Ponieważ SysColumns jest przestarzałe , użyj 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
przyniesie user_type_id = ID
tego typu. Jest to unikalne w obrębie bazy danych. Dla typów danych System: user_type_id = system_type_id
.
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
Jeśli pracujesz z postgresql, istnieje możliwość, że więcej niż jeden schemat może mieć tabelę o tej samej nazwie, w takim przypadku zastosuj poniższe zapytanie
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;