Нулеви колони в база данни понякога могат да доведат до проблеми с производителността. Това определено не означава, че колоните с нулеви стойности винаги ще причиняват проблеми с производителността, но ако случайно имате проблеми с производителността, идентифицирането на колони с нулеви стойности може потенциално да предостави някои улики за това къде е проблемът. Понякога се прави колона NOT NULL може да помогне за подобряване на производителността.
Под „колони с нула“ имам предвид колони, които позволяват NULL. Ако дефиницията на колоната не включва NOT NULL , тогава позволява стойности NULL и е „с нулеви стойности“.
По-долу е даден код, който ви позволява да изброите всички колони с нулеви стойности в база данни в SQL Server.
Пример 1 – INFORMATION_SCHEMA.COLUMNS
Този изглед на информационна схема изброява всички колони, които могат да бъдат достъпни от текущия потребител в текущата база данни. Има колона, наречена IS_NULLABLE . Ако съответната колона позволява NULL, тази колона връща
ДА
. В противен случай
НЕ
се връща.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Това изброява всички колони от изгледа.
Пример 2 – INFORMATION_SCHEMA.COLUMNS с по-малко посочени колони
Може да не искате всички колони да бъдат върнати от изгледа. Ето пример с по-малко върнати колони.
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;
Пример 3 – Използване на sys.columns
Ако не искате да използвате INFORMATION_SCHEMA.COLUMNS view, тогава можете да потърсите sys.columns вместо това вижте.
Въпреки това ще трябва да направите някои обединявания, ако искате да върнете таблиците и/или схемата и т.н.
Пример:
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];