sql >> Databáze >  >> RDS >> Sqlserver

Vypsat všechny sloupce s možnou hodnotou Null v databázi SQL Server

Sloupce v databázi s možnou hodnotou Null mohou někdy vést k problémům s výkonem. To rozhodně neznamená, že sloupce s možnou hodnotou Null vždy způsobí problémy s výkonem, ale pokud se vyskytnou problémy s výkonem, identifikace sloupců s možnou hodnotou Null může potenciálně poskytnout určité vodítko k tomu, kde problém spočívá. Někdy se vytvoří sloupec NOT NULL může pomoci zlepšit výkon.

„Sloupce s možností null“ myslím sloupce, které umožňují hodnotu NULL. Pokud definice sloupce nezahrnuje NOT NULL , pak povoluje hodnoty NULL a je možné jej nulovat.

Níže je kód, který vám umožňuje vypsat všechny sloupce s hodnotou null v databázi na serveru SQL Server.

Příklad 1 – INFORMATION_SCHEMA.COLUMNS

Toto zobrazení informačního schématu obsahuje seznam všech sloupců, ke kterým má aktuální uživatel v aktuální databázi přístup. Má sloupec nazvaný IS_NULLABLE . Pokud příslušný sloupec umožňuje hodnotu NULL, vrátí tento sloupec ANO . V opačném případě NE je vráceno.

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES';

Zde jsou uvedeny všechny sloupce z pohledu.

Příklad 2 – INFORMATION_SCHEMA.COLUMNS s menším počtem zadaných sloupců

Možná nebudete chtít vrátit všechny sloupce ze zobrazení. Zde je příklad s menším počtem vrácených sloupců.

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;

Příklad 3 – Použití sys.columns

Pokud nechcete používat INFORMATION_SCHEMA.COLUMNS zobrazit, pak můžete zadat dotaz na sys.columns místo toho zobrazit.

Pokud však chcete vrátit tabulky a/nebo schéma atd., budete muset provést několik spojení.

Příklad:

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. Sloučit více řádků do jednoho řádku

  2. Jak resetovat/změnit heslo roota MySql příkazového řádku v ubuntu linux

  3. Převeďte číslo měsíce na název měsíce v PostgreSQL

  4. Odstranění úvodních nul z pole v příkazu SQL