SQL Server'daki bir tablodan sütun adlarını nasıl alabilirim?


716

Bir tablonun tüm sütunlarının adını sorgulamak istiyorum. Bunu nasıl yapacağımı buldum:

Ama bilmem gerekenler : Bu Microsoft SQL Server'da (benim durumumda 2008) nasıl yapılabilir ?


48
Hızlı ve kirli bir hile olarak, gerçekten yapmayı seviyorumSELECT * FROM my_table WHERE 1=0
bgusach

12
@bgusach - Kullanıcı, sütun adlarını bir tablodaki satırlar olarak istiyor gibi görünüyor, ancak yapmaya çalıştığınız şey SELECT TOP 0 * FROM my_tableiçin daha az tuş vuruşu var
Jake Wood

@bgusach: Bu bana bir cevap gibi geliyor. Göndermelisiniz.
palswim

Yanıtlar:


864

Bilgi Şeması görünümlerini sorgulayarak bu bilgileri ve çok daha fazlasını elde edebilirsiniz .

Bu örnek sorgu:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

Tüm bu DB nesneleri üzerinden yapılabilir:


25
"= N'Customers '" içindeki "N" ne anlama geliyor?
Qbik

20
Qbik "N" ise unicode ANSI (32bit) ve nvarchar içinde (64bit) varchar gibi unicode dize Handlling için
thatsalok

9
doğruladı: MariaDB için de çalışıyor ! :) (onsuz Nortwind....)
jave.web

5
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';bu benim için çalışıyor
Pavol Travnik

1
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'Localhost üzerinde olduğum ve aynı adlı ama farklı veritabanlarında birden fazla tablo var kullanmak zorunda kaldı .
akinuri

194

Belirli bir tablo için tüm sütunlarla ilgili bilgileri döndüren saklı yordam sp_columns kullanabilirsiniz. Daha fazla bilgiyi burada bulabilirsiniz http://msdn.microsoft.com/en-us/library/ms176077.aspx

Bunu bir SQL sorgusu ile de yapabilirsiniz. Bunun gibi bir şey yardımcı olacaktır:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName') 

Veya bir varyasyon şöyle olur:

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

Bu, tüm sütunlardan tablo adına ve daha sonra sütun adına göre sıralanan tüm sütunları alır.


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

Bu, doğrudan sys.columnsgösterdiği için almaktan daha iyidir DATA_TYPE.


5
Bu standart ANSI SQL olduğu için +1 ( en.wikipedia.org/wiki/Information_schema ) sys.objects gibi diğer cevaplar standart değildir
Tersine Mühendis

Ve tablo başka bir şema (SQL sunucusu "şema" varyantı) AND TABLE_SCHEMA = 'schemaName'ise WHEREyan tümce ekleyin .
Johan

Çok yararlıdır ve her sütun adının yanındaki türleri almak için 'SELECT' ifadenizi ekleyebilir JOIN sys.types t on c.system_type_id = t.system_type_idve ekleyebilirsiniz . t.name
Pac0

56

sp_helpSQL Server 2008'de kullanabilirsiniz .

sp_help <table_name>;

Yukarıdaki komut için klavye kısayolu: tablo adını seçin (yani vurgulayın) ve ALT+ düğmesine basın F1.


1
Bu benim en sevdiğim klavye kısayoludur. Ayrıca Cntl-F1'e sp_helptext atarım. Bu iki kısayol birlikte çok zaman kazandırıyor!
Paul Wehland

44

Bu sorguyu kullanarak cevabı alabilirsiniz:

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

35

MySql'de BİLGİ_SCHEMA kullanmadan sütun adını ve tüm ayrıntıları almak için bu sorguyu yazabilirsiniz:

SHOW COLUMNS FROM database_Name.table_name;

7
@Benjamin, çünkü bu soru SQL Server içindir ve bu cevap MySql
Caimen

1
MySql kullanan insanların çoğu olabilir, bu sorunla karşı karşıya. Ve bundan bahsettim. MySql kullanıyorum.
Sachin Parse

5
Diğer RDBMS'leri kullanan çoğu insanın aynı problemi olup olmadığı önemli değildir, orijinal soru ile ilgisi yoktur ve ilgili cevapları daha da aşağıya iter.
Demonblack

1
Soruyu özel olarak mssql
Lucas

27
--This is another variation used to document a large database for conversion (Edited to --remove static columns)

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

--In the left join, c.type is replaced by c.xtype to get varchar types

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

TABLE_NAME senin masan mı


15
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


11

Bu SO sorusunda aşağıdaki yaklaşım eksik:

-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')

10

Bu verilen olup olmadığını kontrol edecek tableolan Baz Tablo .

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'

10

Bu, tüm sütun adlarını ilgili veri türleriyle verir.

desc <TABLE NAME> ;

Bunun Oracle'da işe yaradığını biliyorum. Peki bu Microsft SQL'de çalışıyor mu? Teşekkür ederim.
DxTx

6

bu sorguyu kullanabilirsiniz

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

6
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

5

Tartışmasız daha sezgisel olan bir diğer seçenek:

SELECT [name] 
FROM sys.columns 
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]') 

Bu, tüm sütun adlarınızı tek bir sütunda verir. Diğer meta verileri önemsiyorsanız, SELECT STATEMENT TO ifadesini değiştirebilirsiniz SELECT *.


3

Yanıtları Özetleme

Bunu yapmanın birçok farklı cevabı ve yolunu görebiliyorum ama içinde bir sürtünme var ve bu objective.

Evet, amaç. Eğer isterseniz only knowsütun adları kullanabilirsiniz

SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table

Ancak usebu sütunları bir yere koymak veya basitçe söylemek isterseniz, manipulateyukarıdaki hızlı sorgular herhangi bir işe yaramayacaktır. Kullanmalısın

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'

benzer sütunlara ihtiyacımız olan belirli sütunları tanımanın bir yolu daha

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

1
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'

Diğer cevaplar aynı.
Kiquenet

0
SELECT TOP (0) [toID]
      ,[sourceID]
      ,[name]
      ,[address]
  FROM [ReportDatabase].[Ticket].[To]

Basit ve herhangi bir sys tablo gerektirmez

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.