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