Нулеви колони в база данни понякога могат да доведат до проблеми с производителността. Това определено не означава, че колоните с нулеви стойности винаги ще причиняват проблеми с производителността, но ако случайно имате проблеми с производителността, идентифицирането на колони с нулеви стойности може потенциално да предостави някои улики за това къде е проблемът. Понякога се прави колона 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];