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