Les colonnes nullables dans une base de données peuvent parfois entraîner des problèmes de performances. Cela ne veut certainement pas dire que les colonnes nullables causeront toujours des problèmes de performances, mais si vous rencontrez des problèmes de performances, l'identification des colonnes nullables peut potentiellement fournir des indices sur l'endroit où se situe le problème. Faire parfois une colonne NOT NULL
peut aider à améliorer les performances.
Par "colonnes nullables", j'entends les colonnes qui autorisent NULL. Si la définition de la colonne n'inclut pas NOT NULL
, alors il autorise les valeurs NULL et c'est "nullable".
Vous trouverez ci-dessous un code qui vous permet de répertorier toutes les colonnes nullables d'une base de données dans SQL Server.
Exemple 1 – INFORMATION_SCHEMA.COLUMNS
Cette vue de schéma d'informations répertorie toutes les colonnes auxquelles l'utilisateur actuel peut accéder dans la base de données actuelle. Il a une colonne appelée IS_NULLABLE
. Si la colonne concernée autorise NULL, cette colonne renvoie
OUI
. Sinon,
NON
est renvoyé.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Ceci répertorie toutes les colonnes de la vue.
Exemple 2 – INFORMATION_SCHEMA.COLUMNS avec moins de colonnes spécifiées
Vous ne voudrez peut-être pas que toutes les colonnes soient renvoyées de la vue. Voici un exemple avec moins de colonnes renvoyées.
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;
Exemple 3 – Utilisation de sys.columns
Si vous ne souhaitez pas utiliser le INFORMATION_SCHEMA.COLUMNS
vue, alors vous pouvez interroger le sys.columns
afficher à la place.
Cependant, vous devrez faire des jointures si vous voulez retourner les tables et/ou le schéma, etc.
Exemple :
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];