Чому стовпці sys.column та INFORMATION_SCHEMA.COLUMNS відображають різну кількість стовпців


11

Я намагаюсь два способи відображення стовпців із конкретною назвою:

  1. ІНФОРМАЦІЯ_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.columnsцим INNER JOINs до sys.objectsта обмежує типи об'єктів Table або View. Я здогадуюсь, що один із ваших записів у цій програмі sys.columnsвилучений.
Марк Сінкінсон

1
Вони обоє трохи відрізняються. Прочитайте, будь ласка, mssqltips.com/sqlservertutorial/183/informationschemacolumns та msdn.microsoft.com/en-us/library/ms176106.aspx. Я б сказав, що ви повинні прочитати документацію перед публікацією
Shanky

Відповіді:


14

Різниця між типами INFORMATION_SCHEMA.COLUMNSта sys.columnsоб'єктами, якими вони охоплюють, є. INFORMATION_SCHEMA.COLUMNSобмежується таблицями та поданнями. Ви можете подивитися на код за ним, зробивши це:

EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]

Якщо ви подивитесь внизу в пункт, де ви побачите

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

Тут він обмежений лише таблицями та переглядами.

Якщо потім перейти до визначення sys.column, ви побачите, що воно містить стовпці для ряду інших об'єктів:

  • Столові функції складання (FT)
  • Вбудовані функції таблиці SQL (IF)
  • Внутрішні таблиці (ІТ)
  • Системні таблиці (S)
  • Таблицеві функції SQL (TF)

Запустіть це, і ви зможете побачити, що таке зайвий об’єкт і який він тип.

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), 
    OBJECTPROPERTYEX(object_id, 'BASETYPE'), *
FROM sys.columns
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.