Le colonne nullable in un database a volte possono causare problemi di prestazioni. Questo non vuol dire assolutamente che le colonne nullable causeranno sempre problemi di prestazioni, ma se si verificano problemi di prestazioni, l'identificazione di colonne nullable può potenzialmente fornire alcuni indizi su dove si trova il problema. A volte creando una colonna NOT NULL
può aiutare a migliorare le prestazioni.
Per "colonne nullable" intendo colonne che consentono NULL. Se la definizione della colonna non include NOT NULL
, quindi consente valori NULL ed è "nullable".
Di seguito è riportato il codice che consente di elencare tutte le colonne nullable in un database in SQL Server.
Esempio 1 – INFORMATION_SCHEMA.COLUMNS
Questa visualizzazione dello schema di informazioni elenca tutte le colonne a cui l'utente corrente può accedere nel database corrente. Ha una colonna chiamata IS_NULLABLE
. Se la colonna pertinente consente NULL, questa colonna restituisce
YES
. Altrimenti,
NO
viene restituito.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Questo elenca tutte le colonne dalla vista.
Esempio 2 – INFORMATION_SCHEMA.COLUMNS con meno colonne specificate
Potresti non voler restituire tutte le colonne dalla vista. Ecco un esempio con meno colonne restituite.
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;
Esempio 3:utilizzo di sys.columns
Se non desideri utilizzare INFORMATION_SCHEMA.COLUMNS
view, puoi interrogare sys.columns
visualizza invece.
Tuttavia, dovrai eseguire alcuni join se desideri restituire le tabelle e/o lo schema, ecc.
Esempio:
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];