Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wyświetl listę wszystkich kolumn dopuszczających wartość null w bazie danych programu SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uniknąć błędu dzielenia przez zero w SQL?

  2. Przełączanie partycji tabel w programie SQL Server:przewodnik

  3. SQL Server ROWCOUNT_BIG()

  4. Szkodliwe, wszechobecne mity dotyczące wydajności SQL Server

  5. Średnia niespójności zmiennoprzecinkowej