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];