Kolumny w bazie danych dopuszczające wartość null mogą czasami prowadzić do problemów z wydajnością. To zdecydowanie nie znaczy, że kolumny dopuszczające wartość null zawsze będą powodować problemy z wydajnością, ale jeśli wystąpią problemy z wydajnością, identyfikacja kolumn dopuszczających wartość null może potencjalnie dostarczyć wskazówek, gdzie leży problem. Czasami tworzenie kolumny NOT NULL może pomóc w poprawie wydajności.
Przez „kolumny dopuszczające wartość null” rozumiem kolumny, które pozwalają na wartość NULL. Jeśli definicja kolumny nie zawiera NOT NULL , wtedy pozwala na wartości NULL i jest „nullable”.
Poniżej znajduje się kod, który pozwala wyświetlić listę wszystkich kolumn dopuszczających wartość null w bazie danych w SQL Server.
Przykład 1 – INFORMACJE_SCHEMA.KOLUMNY
Ten widok schematu informacji zawiera listę wszystkich kolumn, do których bieżący użytkownik może uzyskać dostęp w bieżącej bazie danych. Ma kolumnę o nazwie IS_NULLABLE . Jeśli odpowiednia kolumna zezwala na NULL, ta kolumna zwraca
TAK
. W przeciwnym razie
NIE
jest zwracany.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Zawiera listę wszystkich kolumn z widoku.
Przykład 2 — INFORMATION_SCHEMA.COLUMNS z mniejszą liczbą określonych kolumn
Możesz nie chcieć zwracać wszystkich kolumn z widoku. Oto przykład z mniejszą liczbą zwróconych kolumn.
SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
COLUMN_DEFAULT,
DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES'
ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;
Przykład 3 – Korzystanie z sys.columns
Jeśli nie chcesz używać INFORMATION_SCHEMA.COLUMNS widoku, możesz wysłać zapytanie do sys.columns zamiast tego zobacz.
Będziesz jednak musiał wykonać kilka złączeń, jeśli chcesz zwrócić tabele i/lub schemat itp.
Przykład:
SELECT
SCHEMA_NAME(t.schema_id) AS [Schema],
t.name AS [Table],
c.name AS [Column],
dc.definition AS [Column Default],
ty.name AS [Data Type]
FROM sys.tables AS t
INNER JOIN sys.columns AS c
ON t.object_id = c.object_id
LEFT JOIN sys.types AS ty
ON c.user_type_id = ty.user_type_id
LEFT JOIN sys.default_constraints dc
ON c.default_object_id = dc.object_id
WHERE c.is_nullable = 1
ORDER BY [Schema], [Table], [Column];