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