SQL Server의 테이블에서 열 이름을 얻는 방법은 무엇입니까?


715

테이블의 모든 열 이름을 쿼리하고 싶습니다. 나는 이것을하는 방법을 찾았다 :

그러나 나는 알아야합니다 : 어떻게 Microsoft SQL Server (2008의 경우)에서 이것을 할 수 있습니까?


48
빠르고 더러운 속임수로, 저는 정말 좋아합니다SELECT * FROM my_table WHERE 1=0
bgusach

12
@bgusach - 사용자가 테이블의 행으로 열 이름을 원하는 것 같다,하지만 당신이 뭘 하려는지를 들어, SELECT TOP 0 * FROM my_table적은 키 입력입니다
제이크 우드

@ bgusach : 그것은 저에게 답처럼 들립니다. 게시해야합니다.
palswim

답변:


863

Information Schema views를 쿼리하면이 정보를 훨씬 더 많이 얻을 수 있습니다 .

이 샘플 쿼리 :

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

이 모든 DB 객체를 만들 수 있습니다.


25
"= N'Customers '"에서 "N"은 무엇을 의미합니까?
Qbik

20
Qbik "N"ANSI (32 비트)의 varchar 및 유니 코드 (64 비트)의 nvarchar와 같은 유니 코드 문자열을 처리하는 경우
thatsalok

9
확인 : MariaDB 도 작동합니다 ! :) ( Nortwind.
with

5
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';이것은 나를 위해 작동
Pavol Travnik

1
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'localhost에 있기 때문에 사용해야 했고 동일한 이름이지만 다른 데이터베이스에 여러 테이블이 있습니다.
akinuri

194

주어진 테이블의 모든 열과 관련된 정보를 반환하는 저장 프로 시저 sp_columns를 사용할 수 있습니다. 자세한 정보는 http://msdn.microsoft.com/en-us/library/ms176077.aspx 에서 확인할 수 있습니다 .

SQL 쿼리로 수행 할 수도 있습니다. 이와 같은 것이 도움이 될 것입니다.

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

또는 변형은 다음과 같습니다.

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

모든 테이블에서 모든 열을 테이블 이름 순서로 정렬 한 다음 열 이름으로 가져옵니다.


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

이것은 직접 sys.columns보여주기 때문에 얻는 것보다 낫습니다 DATA_TYPE.


5
이것은 표준 ANSI SQL이므로 +1 ( en.wikipedia.org/wiki/Information_schema ) sys.objects와 같은 다른 답변은 표준이 아닙니다
Reverse Engineer

그리고 테이블이 다른 스키마 (SQL 서버 "스키마"변형)에 AND TABLE_SCHEMA = 'schemaName'있는 경우 WHERE절을 추가 하십시오 .
Johan

매우 유용하며 'SELECT'문에 추가 JOIN sys.types t on c.system_type_id = t.system_type_id및 추가 하여 각 열 이름 옆에 유형t.name 을 가져올 수도 있습니다 .
Pac0

56

sp_helpSQL Server 2008에서 사용할 수 있습니다 .

sp_help <table_name>;

위 명령의 바로 가기 키 : 테이블 이름을 선택 (즉 강조 표시)하고 ALT+를 누릅니다 F1.


1
이것은 내가 가장 좋아하는 키보드 단축키입니다. 또한 sp_helptext를 Cntl-F1에 할당합니다. 이 두 가지 단축키를 함께 사용하면 많은 시간을 절약 할 수 있습니다!
Paul Wehland

44

이 쿼리를 사용하면 답을 얻을 수 있습니다.

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

35

MySql에서 INFORMATION_SCHEMA를 사용하지 않고 열 이름과 모든 세부 사항을 얻기 위해이 쿼리를 작성할 수 있습니다.

SHOW COLUMNS FROM database_Name.table_name;

7
@Benjamin,이 질문은 SQL Server에 대한
것이며이

1
MySql을 사용하는 대부분의 사람들 이이 문제에 직면 할 수 있습니다. 그리고 나는 그것을 언급했다. MySql을 사용하고 있습니다.
Sachin 구문 분석

5
다른 RDBMS를 사용하는 대부분의 사람들이 동일한 문제를 가지고 있는지 여부는 중요하지 않으며 원래 질문과 관련이 없으며 관련 답변을 더 아래로 밀어냅니다.
Demonblack

1
질문은 특히 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 당신의 테이블입니까


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

이 SO 질문에는 다음과 같은 접근법이 없습니다.

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

10

그것은 (가) 제공 여부를 확인할 것 table입니다 자료 표 .

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

당신은 이것을 시도 할 수 있습니다. 이것은 모든 열 이름에 해당 데이터 유형을 제공합니다.

desc <TABLE NAME> ;

나는 이것이 Oracle에서 작동한다는 것을 알고 있습니다. 그러나 이것이 Microsft SQL에서 작동합니까? 감사합니다.
DxTx

6

이 쿼리를 사용할 수 있습니다

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


5

더 직관적 인 또 다른 옵션은 다음과 같습니다.

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

이렇게하면 모든 열 이름이 단일 열로 제공됩니다. 다른 메타 데이터에 관심이있는 경우 SELECT STATEMENT TO 편집을 변경할 수 있습니다 SELECT *.


3

답변 요약

나는 이것을 수행하는 많은 다른 답변과 방법을 볼 수 있지만 이것에는 문지름이 있으며 그것은입니다 objective.

예, 목표입니다. only know열 이름 을 원한다면 사용할 수 있습니다

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

그러나 use해당 열을 어딘가에 원하거나 간단히 말하면 manipulate위의 빠른 쿼리는 사용되지 않습니다. 당신은 사용해야합니다

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

비슷한 열이 필요한 특정 열을 아는 또 다른 방법

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


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

간단하고 sys 테이블이 필요하지 않습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.