Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Избройте всички колони с нулеви стойности в база данни на SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирам произволно число за всеки ред в T-SQL избор?

  2. Защо UDF е толкова по-бавен от подзаявката?

  3. Как да изброя всички таблици във всички бази данни в SQL Server в един набор от резултати?

  4. SQL Server:Възможно ли е да се вмъкнат в две таблици едновременно?

  5. Възможно ли е да се изберат данни на sql сървъра, като се използва редната позиция на колоната