sys.columns와 INFORMATION_SCHEMA.COLUMNS가 다른 수의 열을 표시하는 이유


11

특정 이름으로 열을 표시하는 두 가지 방법을 시도하고 있습니다.

  1. INFORMATION_SCHEMA.COLUMNS

    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME='SUPPLIER_NAME';
  2. SYS.COLUMNS

    SELECT *
    FROM SYS.COLUMNS
    WHERE NAME='SUPPLIER_NAME'

쿼리가 다른 출력을 표시하는 이유는 무엇입니까?

SSMS 스크린 잡아


데이터베이스에 열이 4 개 뿐이지 만 sys.columns를 사용하면 5가 표시됩니다.
Vinoth _S

3
INFORMATION_SCHEMA.COLUMNS단지 이상이다 sys.columnsINNER JOIN에게의 sys.objects테이블 또는 뷰의 객체 유형 및 제한합니다을. 내 생각에 귀하의 기록 중 하나 sys.columns가이 제한에서 제거되었습니다.
Mark Sinkinson

1
둘 다 조금 다릅니다. 읽어 보시기 바랍니다 mssqltips.com/sqlservertutorial/183/informationschemacolumns을 하고 msdn.microsoft.com/en-us/library/ms176106.aspx 난 당신이 게시하기 전에 읽기 문서가 있어야 말할 것
Shanky

답변:


14

차이 INFORMATION_SCHEMA.COLUMNSsys.columns이들이 덮 개체 유형이다. INFORMATION_SCHEMA.COLUMNS테이블과 뷰로 제한됩니다. 다음을 수행하여 코드를 살펴볼 수 있습니다.

EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]

where 절의 맨 아래를 보면

o.type IN ('U', 'V')

여기에서는 테이블 및 뷰로 만 제한됩니다.

그런 다음 sys.columns의 정의를 살펴보면 여러 다른 객체에 대한 열이 포함되어 있음을 알 수 있습니다.

  • 테이블 반환 어셈블리 함수 (FT)
  • 인라인 테이블 반환 SQL 함수 (IF)
  • 내부 테이블 (IT)
  • 시스템 테이블 (S)
  • 테이블 반환 SQL 함수 (TF)

이것을 실행하면 추가 객체가 무엇이며 어떤 유형인지 확인할 수 있습니다.

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), 
    OBJECTPROPERTYEX(object_id, 'BASETYPE'), *
FROM sys.columns
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.