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