Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Répertorier toutes les colonnes Nullable dans une base de données SQL Server

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